1b78f13911bfe6eda303e91ef215c87a165aae8aeAlexandre Rames// Copyright 2015, VIXL authors
288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// All rights reserved.
388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//
488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// Redistribution and use in source and binary forms, with or without
588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// modification, are permitted provided that the following conditions are met:
688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//
788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//   * Redistributions of source code must retain the above copyright notice,
888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//     this list of conditions and the following disclaimer.
988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//   * Redistributions in binary form must reproduce the above copyright notice,
1088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//     this list of conditions and the following disclaimer in the documentation
1188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//     and/or other materials provided with the distribution.
1288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//   * Neither the name of ARM Limited nor the names of its contributors may be
1388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//     used to endorse or promote products derived from this software without
1488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//     specific prior written permission.
1588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois//
1688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
1788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
2088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
2388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
2778973f258039f6e96eba85f1b5ecdb14b3c51dbbPierre Langloisextern "C" {
2888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#include <stdint.h>
2978973f258039f6e96eba85f1b5ecdb14b3c51dbbPierre Langlois}
3078973f258039f6e96eba85f1b5ecdb14b3c51dbbPierre Langlois
3178973f258039f6e96eba85f1b5ecdb14b3c51dbbPierre Langlois#include <cassert>
3278973f258039f6e96eba85f1b5ecdb14b3c51dbbPierre Langlois#include <cstdio>
3378973f258039f6e96eba85f1b5ecdb14b3c51dbbPierre Langlois#include <cstdlib>
3478973f258039f6e96eba85f1b5ecdb14b3c51dbbPierre Langlois#include <cstring>
3588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#include <iomanip>
3660241a544be0ebf48347789bf0ec268414364627Vincent Belliard#include <iostream>
3778973f258039f6e96eba85f1b5ecdb14b3c51dbbPierre Langlois
3888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#include "utils-vixl.h"
39d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/constants-aarch32.h"
40d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/instructions-aarch32.h"
41989663e3cb7be8ac458d71f8e8d99afd29b13a39Pierre Langlois#include "aarch32/operands-aarch32.h"
42d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/disasm-aarch32.h"
4388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
4488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisnamespace vixl {
4588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisnamespace aarch32 {
4688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
471075d15db3f11224e70960ed653462064018a001Vincent Belliardclass T32CodeAddressIncrementer {
481075d15db3f11224e70960ed653462064018a001Vincent Belliard  uint32_t* code_address_;
491075d15db3f11224e70960ed653462064018a001Vincent Belliard  uint32_t increment_;
5088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
5188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public:
521075d15db3f11224e70960ed653462064018a001Vincent Belliard  T32CodeAddressIncrementer(uint32_t instr, uint32_t* code_address)
531075d15db3f11224e70960ed653462064018a001Vincent Belliard      : code_address_(code_address),
541075d15db3f11224e70960ed653462064018a001Vincent Belliard        increment_(Disassembler::Is16BitEncoding(instr) ? 2 : 4) {}
551075d15db3f11224e70960ed653462064018a001Vincent Belliard  ~T32CodeAddressIncrementer() { *code_address_ += increment_; }
5688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois};
5788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
581075d15db3f11224e70960ed653462064018a001Vincent Belliardclass A32CodeAddressIncrementer {
591075d15db3f11224e70960ed653462064018a001Vincent Belliard  uint32_t* code_address_;
6088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public:
621075d15db3f11224e70960ed653462064018a001Vincent Belliard  explicit A32CodeAddressIncrementer(uint32_t* code_address)
631075d15db3f11224e70960ed653462064018a001Vincent Belliard      : code_address_(code_address) {}
641075d15db3f11224e70960ed653462064018a001Vincent Belliard  ~A32CodeAddressIncrementer() { *code_address_ += 4; }
6588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois};
6688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisclass DecodeNeon {
6888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  int lane_;
6988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  SpacingType spacing_;
7088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  bool valid_;
7188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
7288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public:
7388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  DecodeNeon(int lane, SpacingType spacing)
7488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      : lane_(lane), spacing_(spacing), valid_(true) {}
7588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  DecodeNeon() : lane_(0), spacing_(kSingle), valid_(false) {}
7688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  int GetLane() const { return lane_; }
7788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  SpacingType GetSpacing() const { return spacing_; }
7888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  bool IsValid() const { return valid_; }
7988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois};
8088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
8188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisclass DecodeNeonAndAlign : public DecodeNeon {
8288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public:
8388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  Alignment align_;
8488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  DecodeNeonAndAlign(int lanes, SpacingType spacing, Alignment align)
8588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      : DecodeNeon(lanes, spacing), align_(align) {}
8688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  DecodeNeonAndAlign() : align_(kBadAlignment) {}
8788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  Alignment GetAlign() const { return align_; }
8888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois};
8988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
9088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// Start of generated code.
9188c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_L_imm6_1_Decode(uint32_t value, uint32_t type_value) {
9288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0xf) == 0x1) {
9388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
9488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
9588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S8;
9688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
9788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U8;
9888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
9988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0xe) == 0x2) {
10088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
10188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
10288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S16;
10388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
10488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U16;
10588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
10688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0xc) == 0x4) {
10788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
10888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
10988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S32;
11088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
11188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U32;
11288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
11388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x8) == 0x8) {
11488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
11588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
11688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S64;
11788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
11888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U64;
11988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
12088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
12188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
12288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
12388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
12488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_L_imm6_2_Decode(uint32_t value, uint32_t type_value) {
12588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0xf) == 0x1) {
12688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    if (type_value == 0x1) return S8;
12788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0xe) == 0x2) {
12888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    if (type_value == 0x1) return S16;
12988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0xc) == 0x4) {
13088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    if (type_value == 0x1) return S32;
13188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x8) == 0x8) {
13288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    if (type_value == 0x1) return S64;
13388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
13488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
13588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
13688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
13788c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_L_imm6_3_Decode(uint32_t value) {
13888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0xf) == 0x1) {
13988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return I8;
14088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0xe) == 0x2) {
14188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return I16;
14288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0xc) == 0x4) {
14388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return I32;
14488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x8) == 0x8) {
14588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return I64;
14688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
14788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
14888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
14988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
15088c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_L_imm6_4_Decode(uint32_t value) {
15188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0xf) == 0x1) {
15288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped8;
15388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0xe) == 0x2) {
15488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped16;
15588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0xc) == 0x4) {
15688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped32;
15788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x8) == 0x8) {
15888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped64;
15988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
16088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
16188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
16288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
16388c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_imm6_1_Decode(uint32_t value, uint32_t type_value) {
16488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x7) == 0x1) {
16588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
16688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
16788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S16;
16888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
16988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U16;
17088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
17188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x6) == 0x2) {
17288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
17388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
17488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S32;
17588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
17688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U32;
17788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
17888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x4) == 0x4) {
17988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
18088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
18188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S64;
18288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
18388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U64;
18488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
18588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
18688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
18788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
18888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
18988c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_imm6_2_Decode(uint32_t value, uint32_t type_value) {
19088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x7) == 0x1) {
19188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    if (type_value == 0x1) return S16;
19288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x6) == 0x2) {
19388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    if (type_value == 0x1) return S32;
19488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x4) == 0x4) {
19588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    if (type_value == 0x1) return S64;
19688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
19788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
19888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
19988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
20088c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_imm6_3_Decode(uint32_t value) {
20188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x7) == 0x1) {
20288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return I16;
20388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x6) == 0x2) {
20488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return I32;
20588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x4) == 0x4) {
20688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return I64;
20788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
20888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
20988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
21088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
21188c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_imm6_4_Decode(uint32_t value, uint32_t type_value) {
21288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x7) == 0x1) {
21388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
21488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
21588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S8;
21688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
21788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U8;
21888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
21988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x6) == 0x2) {
22088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
22188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
22288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S16;
22388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
22488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U16;
22588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
22688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((value & 0x4) == 0x4) {
22788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (type_value) {
22888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0:
22988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return S32;
23088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x1:
23188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return U32;
23288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
23388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
23488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
23588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
23688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
23788c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_U_size_1_Decode(uint32_t value) {
23888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
23988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
24088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S8;
24188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
24288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
24388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
24488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
24588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x4:
24688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U8;
24788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x5:
24888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U16;
24988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
25088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
25188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x8:
25288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return P8;
25388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0xa:
25488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return P64;
25588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
25688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
25788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
25888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
25988c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_size_1_Decode(uint32_t value) {
26088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
26188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
26288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I8;
26388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
26488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I16;
26588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
26688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I32;
26788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x4:
26888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return P8;
26988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
27088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
27188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
27288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
27388c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_size_2_Decode(uint32_t value) {
27488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
27588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
27688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S8;
27788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
27888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
27988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
28088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
28188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x4:
28288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U8;
28388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x5:
28488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U16;
28588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
28688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
28788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
28888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
28988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
29088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
29188c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_size_3_Decode(uint32_t value) {
29288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
29388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
29488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
29588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
29688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
29788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
29888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S64;
29988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x4:
30088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U16;
30188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x5:
30288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
30388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
30488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U64;
30588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
30688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
30788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
30888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
30988c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_U_imm3H_1_Decode(uint32_t value) {
31088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
31188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
31288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S8;
31388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
31488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
31588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x4:
31688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
31788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x9:
31888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U8;
31988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0xa:
32088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U16;
32188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0xc:
32288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
32388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
32488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
32588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
32688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
32788c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_U_opc1_opc2_1_Decode(uint32_t value, unsigned* lane) {
32888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x18) == 0x8) {
32988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = value & 7;
33088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return S8;
33188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
33288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x19) == 0x1) {
33388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = (value >> 1) & 3;
33488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return S16;
33588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
33688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x18) == 0x18) {
33788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = value & 7;
33888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return U8;
33988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
34088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x19) == 0x11) {
34188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = (value >> 1) & 3;
34288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return U16;
34388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
34488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x1b) == 0x0) {
34588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = (value >> 2) & 1;
34688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped32;
34788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
34888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  *lane = -1;
34988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
35088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
35188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
35288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_opc1_opc2_1_Decode(uint32_t value, unsigned* lane) {
35388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x8) == 0x8) {
35488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = value & 7;
35588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped8;
35688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
35788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x9) == 0x1) {
35888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = (value >> 1) & 3;
35988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped16;
36088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
36188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0xb) == 0x0) {
36288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = (value >> 2) & 1;
36388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped32;
36488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
36588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  *lane = -1;
36688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
36788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
36888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
36988c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_imm4_1_Decode(uint32_t value, unsigned* lane) {
37088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x1) == 0x1) {
37188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = (value >> 1) & 7;
37288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped8;
37388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
37488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x3) == 0x2) {
37588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = (value >> 2) & 3;
37688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped16;
37788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
37888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((value & 0x7) == 0x4) {
37988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    *lane = (value >> 3) & 1;
38088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    return Untyped32;
38188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
38288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  *lane = -1;
38388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
38488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
38588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
38688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_B_E_1_Decode(uint32_t value) {
38788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
38888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
38988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped8;
39088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
39188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped16;
39288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
39388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped32;
39488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
39588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
39688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
39788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
39888c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_1_Decode1(uint32_t value) {
39988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
40088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
40188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
40288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
40388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
40488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
40588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
40688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
40788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
40888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
40988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
41088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
41188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
41288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_1_Decode2(uint32_t value) {
41388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
41488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
41588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
41688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
41788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
41888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
41988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
42088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
42188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
42288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
42388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
42488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
42588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
42688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_2_Decode(uint32_t value) {
42788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
42888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
42988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
43088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
43188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
43288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
43388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
43488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
43588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
43688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_3_Decode(uint32_t value) {
43788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
43888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
43988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
44088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
44188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
44288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
44388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
44488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
44588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
44688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_U_sx_1_Decode(uint32_t value) {
44788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
44888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
44988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
45088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
45188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
45288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
45388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U16;
45488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
45588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
45688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
45788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
45888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
45988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
46088c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_U_1_Decode1(uint32_t value) {
46188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
46288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
46388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
46488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
46588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
46688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
46788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
46888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
46988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
47088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
47188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
47288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
47388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
47488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_op_U_1_Decode2(uint32_t value) {
47588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
47688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
47788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
47888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
47988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
48088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
48188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
48288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
48388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
48488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
48588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
48688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
48788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
48888c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_sz_1_Decode(uint32_t value) {
48988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
49088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
49188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
49288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
49388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
49488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
49588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
49688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_F_size_1_Decode(uint32_t value) {
49788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
49888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
49988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S8;
50088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
50188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
50288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
50388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
50488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
50588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
50688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
50788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
50888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
50988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
51088c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_F_size_2_Decode(uint32_t value) {
51188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
51288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
51388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I8;
51488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
51588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I16;
51688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
51788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I32;
51888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
51988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
52088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
52188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
52288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
52388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
52488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_F_size_3_Decode(uint32_t value) {
52588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
52688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
52788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I16;
52888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
52988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I32;
53088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
53188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
53288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
53388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
53488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
53588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
53688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_F_size_4_Decode(uint32_t value) {
53788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
53888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
53988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
54088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
54188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return F32;
54288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
54388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
54488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
54588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
54688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_U_size_1_Decode(uint32_t value) {
54788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
54888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
54988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S8;
55088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
55188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
55288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
55388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
55488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x4:
55588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U8;
55688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x5:
55788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U16;
55888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
55988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
56088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
56188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
56288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
56388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
56488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_U_size_2_Decode(uint32_t value) {
56588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
56688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
56788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
56888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
56988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
57088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x5:
57188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U16;
57288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
57388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
57488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
57588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
57688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
57788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
57888c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_U_size_3_Decode(uint32_t value) {
57988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
58088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
58188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S8;
58288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
58388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
58488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
58588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
58688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
58788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S64;
58888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x4:
58988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U8;
59088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x5:
59188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U16;
59288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x6:
59388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U32;
59488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x7:
59588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return U64;
59688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
59788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
59888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
59988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
60088c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_1_Decode(uint32_t value) {
60188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
60288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
60388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped8;
60488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
60588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
60688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
60788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
60888c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_2_Decode(uint32_t value) {
60988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
61088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
61188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I8;
61288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
61388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I16;
61488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
61588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I32;
61688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
61788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I64;
61888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
61988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
62088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
62188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
62288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_3_Decode(uint32_t value) {
62388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
62488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
62588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I16;
62688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
62788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I32;
62888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
62988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I64;
63088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
63188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
63288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
63388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
63488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_4_Decode(uint32_t value) {
63588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
63688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
63788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I8;
63888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
63988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I16;
64088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
64188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I32;
64288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
64388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
64488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
64588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
64688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_5_Decode(uint32_t value) {
64788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
64888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
64988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S8;
65088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
65188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
65288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
65388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
65488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
65588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
65688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
65788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
65888c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_6_Decode(uint32_t value) {
65988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
66088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
66188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped8;
66288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
66388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped16;
66488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
66588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped32;
66688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
66788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped64;
66888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
66988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
67088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
67188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
67288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_7_Decode(uint32_t value) {
67388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
67488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
67588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped8;
67688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
67788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped16;
67888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
67988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped32;
68088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
68188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
68288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
68388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
68488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_8_Decode(uint32_t value) {
68588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
68688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
68788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped8;
68888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
68988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped16;
69088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
69188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped32;
69288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x3:
69388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped32;
69488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
69588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
69688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
69788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
69888c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_9_Decode(uint32_t value, uint32_t type_value) {
69988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
70088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
70188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (type_value) {
70288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x0:
70388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return I16;
70488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
70588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
70688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
70788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (type_value) {
70888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x0:
70988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return I32;
71088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x1:
71188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return F32;
71288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
71388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
71488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
71588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
71688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
71788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
71888c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_10_Decode(uint32_t value) {
71988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
72088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
72188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I8;
72288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
72388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I16;
72488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
72588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I32;
72688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
72788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
72888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
72988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
73088c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_11_Decode(uint32_t value, uint32_t type_value) {
73188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
73288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
73388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (type_value) {
73488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x0:
73588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return S16;
73688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x1:
73788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return U16;
73888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
73988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
74088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
74188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (type_value) {
74288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x0:
74388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return S32;
74488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x1:
74588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return U32;
74688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
74788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
74888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
74988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
75088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
75188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
75288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_12_Decode(uint32_t value, uint32_t type_value) {
75388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
75488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
75588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (type_value) {
75688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x0:
75788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return S8;
75888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x1:
75988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return U8;
76088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
76188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
76288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
76388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (type_value) {
76488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x0:
76588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return S16;
76688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x1:
76788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return U16;
76888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
76988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
77088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
77188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (type_value) {
77288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x0:
77388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return S32;
77488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x1:
77588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          return U32;
77688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
77788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
77888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
77988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
78088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
78188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
78288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_13_Decode(uint32_t value) {
78388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
78488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
78588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
78688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
78788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
78888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
78988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
79088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
79188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
79288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_14_Decode(uint32_t value) {
79388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
79488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
79588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S16;
79688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
79788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S32;
79888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
79988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return S64;
80088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
80188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
80288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
80388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
80488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_15_Decode(uint32_t value) {
80588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
80688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
80788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped8;
80888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
80988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return Untyped16;
81088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
81188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
81288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
81388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
81488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDataTypeValue Dt_size_16_Decode(uint32_t value) {
81588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
81688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x0:
81788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I8;
81888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x1:
81988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I16;
82088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x2:
82188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return I32;
82288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
82388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kDataTypeValueInvalid;
82488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
82588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
82688c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDecodeNeon Index_1_Decode(uint32_t value, DataType dt) {
82788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (dt.GetValue()) {
82888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped8: {
82988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 1) & 0x7;
83088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 1) != 0) break;
83188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = kSingle;
83288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeon(lane, spacing);
83388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
83488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped16: {
83588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 2) & 0x3;
83688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 1) != 0) break;
83788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = ((value & 3) == 2) ? kDouble : kSingle;
83888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeon(lane, spacing);
83988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
84088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped32: {
84188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 3) & 0x1;
84288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 3) != 0) break;
84388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = ((value & 7) == 4) ? kDouble : kSingle;
84488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeon(lane, spacing);
84588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
84688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
84788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
84888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
84988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return DecodeNeon();
85088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
85188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
85288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDecodeNeonAndAlign Align_index_align_1_Decode(uint32_t value, DataType dt) {
85388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (dt.GetValue()) {
85488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped8: {
85588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
85688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 1) == 0) {
85788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
85888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
85988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
86088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
86188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 1) & 0x7;
86288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = kSingle;
86388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
86488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
86588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped16: {
86688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
86788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 3) == 1) {
86888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k16BitAlign;
86988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 3) == 0) {
87088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
87188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
87288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
87388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
87488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 2) & 0x3;
87588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = kSingle;
87688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
87788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
87888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped32: {
87988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
88088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 7) == 3) {
88188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k32BitAlign;
88288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 7) == 0) {
88388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
88488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
88588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
88688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
88788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 3) & 0x1;
88888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = kSingle;
88988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
89088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
89188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
89288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
89388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
89488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return DecodeNeonAndAlign();
89588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
89688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
89788c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDecodeNeonAndAlign Align_index_align_2_Decode(uint32_t value, DataType dt) {
89888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (dt.GetValue()) {
89988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped8: {
90088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
90188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 1) == 1) {
90288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k16BitAlign;
90388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 1) == 0) {
90488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
90588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
90688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
90788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
90888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 1) & 0x7;
90988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = kSingle;
91088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
91188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
91288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped16: {
91388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
91488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 1) == 1) {
91588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k32BitAlign;
91688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 1) == 0) {
91788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
91888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
91988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
92088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
92188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 2) & 0x3;
92288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = ((value & 2) == 2) ? kDouble : kSingle;
92388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
92488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
92588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped32: {
92688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
92788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 3) == 1) {
92888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k64BitAlign;
92988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 3) == 0) {
93088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
93188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
93288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
93388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
93488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 3) & 0x1;
93588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = ((value & 4) == 4) ? kDouble : kSingle;
93688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
93788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
93888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
93988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
94088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
94188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return DecodeNeonAndAlign();
94288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
94388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
94488c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisDecodeNeonAndAlign Align_index_align_3_Decode(uint32_t value, DataType dt) {
94588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (dt.GetValue()) {
94688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped8: {
94788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
94888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 1) == 1) {
94988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k32BitAlign;
95088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 1) == 0) {
95188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
95288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
95388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
95488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
95588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 1) & 0x7;
95688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = kSingle;
95788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
95888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
95988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped16: {
96088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
96188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 1) == 1) {
96288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k64BitAlign;
96388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 1) == 0) {
96488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
96588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
96688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
96788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
96888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 2) & 0x3;
96988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = ((value & 2) == 2) ? kDouble : kSingle;
97088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
97188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
97288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case Untyped32: {
97388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      AlignmentType align;
97488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if ((value & 3) == 1) {
97588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k64BitAlign;
97688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 3) == 2) {
97788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = k128BitAlign;
97888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else if ((value & 3) == 0) {
97988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        align = kNoAlignment;
98088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      } else {
98188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
98288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
98388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      int lane = (value >> 3) & 0x1;
98488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      SpacingType spacing = ((value & 4) == 4) ? kDouble : kSingle;
98588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return DecodeNeonAndAlign(lane, spacing, align);
98688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
98788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
98888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
98988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
99088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return DecodeNeonAndAlign();
99188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
99288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
99388c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisAlignment Align_a_1_Decode(uint32_t value, DataType dt) {
99488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
99588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0:
99688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return kNoAlignment;
99788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 1:
99888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (dt.Is(Untyped16)) return k16BitAlign;
99988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (dt.Is(Untyped32)) return k32BitAlign;
100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
100188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
100388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
100488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kBadAlignment;
100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
100788c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisAlignment Align_a_2_Decode(uint32_t value, DataType dt) {
100888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
100988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0:
101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return kNoAlignment;
101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 1:
101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (dt.Is(Untyped8)) return k16BitAlign;
101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (dt.Is(Untyped16)) return k32BitAlign;
101488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (dt.Is(Untyped32)) return k64BitAlign;
101588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
101888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kBadAlignment;
102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
102188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
102288c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisAlignment Align_a_3_Decode(uint32_t value, DataType dt, uint32_t size) {
102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0:
102588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (size != 3) return kNoAlignment;
102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 1:
102888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (dt.Is(Untyped8)) return k32BitAlign;
102988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (dt.Is(Untyped16)) return k64BitAlign;
103088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (size == 2) return k64BitAlign;
103188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      if (size == 3) return k128BitAlign;
103288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
103388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
103488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
103588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
103688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kBadAlignment;
103788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
103888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
103988c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisAlignment Align_align_1_Decode(uint32_t value) {
104088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
104188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0:
104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return kNoAlignment;
104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 1:
104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k64BitAlign;
104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 2:
104688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k128BitAlign;
104788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 3:
104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k256BitAlign;
104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kBadAlignment;
105388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
105488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
105588c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisAlignment Align_align_2_Decode(uint32_t value) {
105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0:
105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return kNoAlignment;
105988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 1:
106088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k64BitAlign;
106188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 2:
106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k128BitAlign;
106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 3:
106488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k256BitAlign;
106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
106688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
106788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
106888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kBadAlignment;
106988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
107088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
107188c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisAlignment Align_align_3_Decode(uint32_t value) {
107288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
107388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0:
107488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return kNoAlignment;
107588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 1:
107688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k64BitAlign;
107788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
107888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
107988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kBadAlignment;
108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
108388c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisAlignment Align_align_4_Decode(uint32_t value) {
108488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
108588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0:
108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return kNoAlignment;
108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 1:
108888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k64BitAlign;
108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 2:
109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k128BitAlign;
109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 3:
109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k256BitAlign;
109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
109588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
109688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kBadAlignment;
109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
109988c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisAlignment Align_align_5_Decode(uint32_t value) {
110088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (value) {
110188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0:
110288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return kNoAlignment;
110388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 1:
110488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k64BitAlign;
110588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 2:
110688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k128BitAlign;
110788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 3:
110888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      return k256BitAlign;
110988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    default:
111088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
111188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
111288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return kBadAlignment;
111388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
111488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
111588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
111688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::adc(Condition cond,
111788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
111888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
111988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
112088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
11217f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAdc, kArithmetic);
1122b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAdc) << ConditionPrinter(it_block_, cond) << size;
1123c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
112488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1125c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
112688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1127c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
112888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::adcs(Condition cond,
113188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
113288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
113388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
11357f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAdcs, kArithmetic);
1136b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAdcs) << ConditionPrinter(it_block_, cond) << size;
1137c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1139c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1141c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::add(Condition cond,
114588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
114688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
114788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
11497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAdd, kArithmetic);
1150b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAdd) << ConditionPrinter(it_block_, cond) << size;
1151c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
115288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1153c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
115488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1155c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
115688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
115888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::add(Condition cond, Register rd, const Operand& operand) {
11597f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAdd, kArithmetic);
1160b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAdd) << ConditionPrinter(it_block_, cond) << " " << rd
1161b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << operand;
116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::adds(Condition cond,
116588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
11697f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAdds, kArithmetic);
1170b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAdds) << ConditionPrinter(it_block_, cond) << size;
1171c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1173c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1175c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::adds(Register rd, const Operand& operand) {
11797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAdds, kArithmetic);
1180b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAdds) << " " << rd << ", " << operand;
118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
118388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::addw(Condition cond,
118488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
118588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
118688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
11877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAddw, kArithmetic);
1188b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAddw) << ConditionPrinter(it_block_, cond);
1189c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
119088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1191c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
119288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1193c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
119488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
119588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
119688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::adr(Condition cond,
119788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
119888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
119988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Label* label) {
12007f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAdr, kAddress);
1201b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAdr) << ConditionPrinter(it_block_, cond) << size << " "
1202b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << PrintLabel(kAnyLocation, label, GetCodeAddress() & ~3);
120388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
120488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
120588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::and_(Condition cond,
120688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
120788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
120888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
120988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
12107f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAnd, kBitwise);
1211b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAnd) << ConditionPrinter(it_block_, cond) << size;
1212c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
121388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1214c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
121588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1216c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
121788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
121888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
121988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ands(Condition cond,
122088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
122188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
122288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
122388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
12247f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAnds, kBitwise);
1225b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAnds) << ConditionPrinter(it_block_, cond) << size;
1226c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
122788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1228c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
122988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1230c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
123188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
123288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
123388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::asr(Condition cond,
123488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
123588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
123688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rm,
123788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
12387f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAsr, kShift);
1239b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAsr) << ConditionPrinter(it_block_, cond) << size;
1240c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
124188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
1242c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
124388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1244c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
124588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
124688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
124788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::asrs(Condition cond,
124888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
124988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
125088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rm,
125188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
12527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kAsrs, kShift);
1253b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kAsrs) << ConditionPrinter(it_block_, cond) << size;
1254c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
125588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
1256c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
125788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1258c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
125988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
126088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
126188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::b(Condition cond, EncodingSize size, Label* label) {
12627f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kB, kAddress | kBranch);
1263b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kB) << ConditionPrinter(it_block_, cond) << size << " "
12641075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kCodeLocation, label, GetCodeAddress());
126588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
126688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
126788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::bfc(Condition cond,
126888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
126988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       uint32_t lsb,
127088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
12717f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBfc, kShift);
1272b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBfc) << ConditionPrinter(it_block_, cond) << " " << rd
1273b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", "
1274c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << lsb << ", " << operand;
127588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
127688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
127788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::bfi(Condition cond,
127888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
127988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
128088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       uint32_t lsb,
128188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
12827f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBfi, kShift);
1283b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBfi) << ConditionPrinter(it_block_, cond) << " " << rd
1284b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", "
1285c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << lsb << ", " << operand;
128688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
128788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
128888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::bic(Condition cond,
128988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
129088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
129188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
129288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
12937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBic, kBitwise);
1294b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBic) << ConditionPrinter(it_block_, cond) << size;
1295c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
129688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1297c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
129888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1299c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
130088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
130188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
130288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::bics(Condition cond,
130388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
130488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
130588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
130688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
13077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBics, kBitwise);
1308b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBics) << ConditionPrinter(it_block_, cond) << size;
1309c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
131088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1311c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
131288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1313c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
131488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
131588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
131688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::bkpt(Condition cond, uint32_t imm) {
13177f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBkpt, kSystem);
1318b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBkpt) << ConditionPrinter(it_block_, cond) << " " << imm;
131988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
132088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
132188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::bl(Condition cond, Label* label) {
13227f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBl, kAddress | kBranch);
1323b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBl) << ConditionPrinter(it_block_, cond) << " "
13241075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kCodeLocation, label, GetCodeAddress());
132588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
132688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
132788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::blx(Condition cond, Label* label) {
13287f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBlx, kAddress | kBranch);
1329b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBlx) << ConditionPrinter(it_block_, cond) << " "
13301075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kCodeLocation, label, GetCodeAddress() & ~3);
133188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
133288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
133388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::blx(Condition cond, Register rm) {
13347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBlx, kAddress | kBranch);
1335b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBlx) << ConditionPrinter(it_block_, cond) << " " << rm;
133688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
133788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
133888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::bx(Condition cond, Register rm) {
13397f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBx, kAddress | kBranch);
1340b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBx) << ConditionPrinter(it_block_, cond) << " " << rm;
134188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
134288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
134388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::bxj(Condition cond, Register rm) {
13447f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kBxj, kAddress | kBranch);
1345b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kBxj) << ConditionPrinter(it_block_, cond) << " " << rm;
134688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
134788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
134888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::cbnz(Register rn, Label* label) {
13497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCbnz, kAddress | kBranch);
1350b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCbnz) << " " << rn << ", "
13511075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kCodeLocation, label, GetCodeAddress());
135288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
135388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
135488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::cbz(Register rn, Label* label) {
13557f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCbz, kAddress | kBranch);
1356b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCbz) << " " << rn << ", "
13571075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kCodeLocation, label, GetCodeAddress());
135888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
135988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
136088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::clrex(Condition cond) {
13617f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kClrex, kNoAttribute);
1362b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kClrex) << ConditionPrinter(it_block_, cond);
136388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
136488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
136588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::clz(Condition cond, Register rd, Register rm) {
13667f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kClz, kNoAttribute);
1367b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kClz) << ConditionPrinter(it_block_, cond) << " " << rd
1368b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rm;
136988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
137088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
137188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::cmn(Condition cond,
137288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
137388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
137488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
13757f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCmn, kArithmetic);
1376b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCmn) << ConditionPrinter(it_block_, cond) << size << " "
1377b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << ", " << operand;
137888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
137988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
138088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::cmp(Condition cond,
138188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
138288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
138388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
13847f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCmp, kArithmetic);
1385b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCmp) << ConditionPrinter(it_block_, cond) << size << " "
1386b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << ", " << operand;
138788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
138888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
138988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::crc32b(Condition cond,
139088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
139188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
139288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
13937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCrc32b, kNoAttribute);
1394b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCrc32b) << ConditionPrinter(it_block_, cond) << " " << rd
1395b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm;
139688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
139788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
139888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::crc32cb(Condition cond,
139988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
140088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
140188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
14027f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCrc32cb, kNoAttribute);
1403b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCrc32cb) << ConditionPrinter(it_block_, cond) << " " << rd
1404b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm;
140588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
140688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
140788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::crc32ch(Condition cond,
140888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
140988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
141088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
14117f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCrc32ch, kNoAttribute);
1412b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCrc32ch) << ConditionPrinter(it_block_, cond) << " " << rd
1413b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm;
141488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
141588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
141688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::crc32cw(Condition cond,
141788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
141888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
141988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
14207f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCrc32cw, kNoAttribute);
1421b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCrc32cw) << ConditionPrinter(it_block_, cond) << " " << rd
1422b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm;
142388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
142488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
142588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::crc32h(Condition cond,
142688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
142788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
142888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
14297f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCrc32h, kNoAttribute);
1430b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCrc32h) << ConditionPrinter(it_block_, cond) << " " << rd
1431b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm;
143288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
143388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
143488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::crc32w(Condition cond,
143588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
143688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
143788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
14387f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kCrc32w, kNoAttribute);
1439b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kCrc32w) << ConditionPrinter(it_block_, cond) << " " << rd
1440b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm;
144188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
144288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
144388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::dmb(Condition cond, MemoryBarrier option) {
14447f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kDmb, kNoAttribute);
1445b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kDmb) << ConditionPrinter(it_block_, cond) << " " << option;
144688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
144788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
144888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::dsb(Condition cond, MemoryBarrier option) {
14497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kDsb, kNoAttribute);
1450b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kDsb) << ConditionPrinter(it_block_, cond) << " " << option;
145188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
145288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
145388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::eor(Condition cond,
145488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
145588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
145688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
145788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
14587f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kEor, kBitwise);
1459b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kEor) << ConditionPrinter(it_block_, cond) << size;
1460c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
146188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1462c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
146388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1464c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
146588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
146688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
146788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::eors(Condition cond,
146888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
146988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
147088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
147188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
14727f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kEors, kBitwise);
1473b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kEors) << ConditionPrinter(it_block_, cond) << size;
1474c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
147588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1476c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
147788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1478c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
147988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
148088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
148188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::fldmdbx(Condition cond,
148288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
148388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           WriteBack write_back,
148488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegisterList dreglist) {
14857f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kFldmdbx,
14867f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
1487b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kFldmdbx) << ConditionPrinter(it_block_, cond) << " " << rn
1488c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << dreglist;
148988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
149088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
149188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::fldmiax(Condition cond,
149288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
149388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           WriteBack write_back,
149488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegisterList dreglist) {
14957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kFldmiax,
14967f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
1497b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kFldmiax) << ConditionPrinter(it_block_, cond) << " " << rn
1498c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << dreglist;
149988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
150088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
150188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::fstmdbx(Condition cond,
150288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
150388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           WriteBack write_back,
150488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegisterList dreglist) {
15057f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kFstmdbx,
15067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
1507b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kFstmdbx) << ConditionPrinter(it_block_, cond) << " " << rn
1508c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << dreglist;
150988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
151088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
151188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::fstmiax(Condition cond,
151288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
151388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           WriteBack write_back,
151488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegisterList dreglist) {
15157f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kFstmiax,
15167f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
1517b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kFstmiax) << ConditionPrinter(it_block_, cond) << " " << rn
1518c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << dreglist;
151988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
152088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
152188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::hlt(Condition cond, uint32_t imm) {
15227f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kHlt, kSystem);
1523b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kHlt) << ConditionPrinter(it_block_, cond) << " " << imm;
152488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
152588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
152688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::hvc(Condition cond, uint32_t imm) {
15277f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kHvc, kSystem);
1528b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kHvc) << ConditionPrinter(it_block_, cond) << " " << imm;
152988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
153088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
153188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::isb(Condition cond, MemoryBarrier option) {
15327f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kIsb, kNoAttribute);
1533b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kIsb) << ConditionPrinter(it_block_, cond) << " " << option;
153488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
153588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
153688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::it(Condition cond, uint16_t mask) {
15377f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kIt, kNoAttribute);
1538b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kIt);
153988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  int count;
154088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((mask & 0x1) != 0) {
154188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    count = 3;
154288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((mask & 0x2) != 0) {
154388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    count = 2;
154488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else if ((mask & 0x4) != 0) {
154588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    count = 1;
154688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else {
154788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    count = 0;
154888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
154988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  uint16_t tmp = 0x8;
155088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  uint16_t ref = (cond.GetCondition() & 0x1) << 3;
155188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  while (count-- > 0) {
1552c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << (((mask & tmp) == ref) ? "t" : "e");
155388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    tmp >>= 1;
155488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    ref >>= 1;
155588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
155688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (cond.Is(al)) {
1557c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << " al";
155888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else {
1559c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << " " << cond;
156088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
156188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
156288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
156388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::lda(Condition cond, Register rt, const MemOperand& operand) {
15647f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLda, kAddress | kLoadStore);
1565b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLda) << ConditionPrinter(it_block_, cond) << " " << rt
1566b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadWordLocation, operand);
156788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
156888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
156988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldab(Condition cond,
157088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
157188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
15727f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdab, kAddress | kLoadStore);
1573b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdab) << ConditionPrinter(it_block_, cond) << " " << rt
1574b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadByteLocation, operand);
157588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
157688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
157788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldaex(Condition cond,
157888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rt,
157988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const MemOperand& operand) {
15807f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdaex, kAddress | kLoadStore);
1581b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdaex) << ConditionPrinter(it_block_, cond) << " " << rt
1582b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadWordLocation, operand);
158388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
158488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
158588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldaexb(Condition cond,
158688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
158788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
15887f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdaexb, kAddress | kLoadStore);
1589b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdaexb) << ConditionPrinter(it_block_, cond) << " " << rt
1590b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadByteLocation, operand);
159188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
159288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
159388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldaexd(Condition cond,
159488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
159588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt2,
159688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
15977f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdaexd, kAddress | kLoadStore);
1598b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdaexd) << ConditionPrinter(it_block_, cond) << " " << rt
1599b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt2 << ", "
1600b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << PrintMemOperand(kLoadDoubleWordLocation, operand);
160188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
160288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
160388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldaexh(Condition cond,
160488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
160588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
16067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdaexh, kAddress | kLoadStore);
1607b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdaexh) << ConditionPrinter(it_block_, cond) << " " << rt
1608b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadHalfWordLocation, operand);
160988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
161088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
161188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldah(Condition cond,
161288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
161388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
16147f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdah, kAddress | kLoadStore);
1615b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdah) << ConditionPrinter(it_block_, cond) << " " << rt
1616b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadHalfWordLocation, operand);
161788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
161888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
161988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldm(Condition cond,
162088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
162188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
162288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       WriteBack write_back,
162388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       RegisterList registers) {
16247f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdm, kLoadStore | kLoadStoreMultiple);
1625b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdm) << ConditionPrinter(it_block_, cond) << size << " "
1626b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << registers;
162788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
162888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
162988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldmda(Condition cond,
163088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
163188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
163288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
16337f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdmda, kLoadStore | kLoadStoreMultiple);
1634b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdmda) << ConditionPrinter(it_block_, cond) << " " << rn
1635c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
163688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
163788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
163888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldmdb(Condition cond,
163988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
164088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
164188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
16427f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdmdb, kLoadStore | kLoadStoreMultiple);
1643b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdmdb) << ConditionPrinter(it_block_, cond) << " " << rn
1644c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
164588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
164688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
164788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldmea(Condition cond,
164888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
164988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
165088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
16517f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdmea, kLoadStore | kLoadStoreMultiple);
1652b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdmea) << ConditionPrinter(it_block_, cond) << " " << rn
1653c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
165488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
165588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
165688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldmed(Condition cond,
165788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
165888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
165988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
16607f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdmed, kLoadStore | kLoadStoreMultiple);
1661b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdmed) << ConditionPrinter(it_block_, cond) << " " << rn
1662c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
166388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
166488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
166588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldmfa(Condition cond,
166688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
166788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
166888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
16697f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdmfa, kLoadStore | kLoadStoreMultiple);
1670b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdmfa) << ConditionPrinter(it_block_, cond) << " " << rn
1671c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
167288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
167388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
167488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldmfd(Condition cond,
167588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         EncodingSize size,
167688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
167788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
167888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
16797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdmfd, kLoadStore | kLoadStoreMultiple);
1680b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdmfd) << ConditionPrinter(it_block_, cond) << size << " "
1681b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << registers;
168288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
168388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
168488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldmib(Condition cond,
168588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
168688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
168788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
16887f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdmib, kLoadStore | kLoadStoreMultiple);
1689b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdmib) << ConditionPrinter(it_block_, cond) << " " << rn
1690c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
169188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
169288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
169388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldr(Condition cond,
169488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
169588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rt,
169688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const MemOperand& operand) {
16977f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdr, kAddress | kLoadStore);
1698b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdr) << ConditionPrinter(it_block_, cond) << size << " "
1699b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << PrintMemOperand(kLoadWordLocation, operand);
170088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
170188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
170288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldr(Condition cond,
170388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
170488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rt,
170588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Label* label) {
17067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdr, kAddress | kLoadStore);
1707b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdr) << ConditionPrinter(it_block_, cond) << size << " "
1708b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", "
1709b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << PrintLabel(kLoadWordLocation, label, GetCodeAddress() & ~3);
171088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
171188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
171288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrb(Condition cond,
171388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
171488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
171588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
17167f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrb, kAddress | kLoadStore);
1717b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrb) << ConditionPrinter(it_block_, cond) << size << " "
1718b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << PrintMemOperand(kLoadByteLocation, operand);
171988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
172088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
172188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrb(Condition cond, Register rt, Label* label) {
17227f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrb, kAddress | kLoadStore);
1723b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrb) << ConditionPrinter(it_block_, cond) << " " << rt
1724b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintLabel(kLoadByteLocation, label, GetCodeAddress() & ~3);
172588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
172688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
172788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrd(Condition cond,
172888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
172988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt2,
173088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
17317f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrd, kAddress | kLoadStore);
1732b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrd) << ConditionPrinter(it_block_, cond) << " " << rt
1733b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt2 << ", "
1734b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << PrintMemOperand(kLoadDoubleWordLocation, operand);
173588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
173688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
173788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrd(Condition cond,
173888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
173988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt2,
174088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Label* label) {
17417f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrd, kAddress | kLoadStore);
1742b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrd) << ConditionPrinter(it_block_, cond) << " " << rt
1743b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt2 << ", "
17441075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kLoadDoubleWordLocation, label, GetCodeAddress() & ~3);
174588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
174688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
174788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrex(Condition cond,
174888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rt,
174988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const MemOperand& operand) {
17507f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrex, kAddress | kLoadStore);
1751b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrex) << ConditionPrinter(it_block_, cond) << " " << rt
1752b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadWordLocation, operand);
175388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
175488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
175588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrexb(Condition cond,
175688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
175788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
17587f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrexb, kAddress | kLoadStore);
1759b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrexb) << ConditionPrinter(it_block_, cond) << " " << rt
1760b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadByteLocation, operand);
176188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
176288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
176388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrexd(Condition cond,
176488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
176588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt2,
176688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
17677f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrexd, kAddress | kLoadStore);
1768b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrexd) << ConditionPrinter(it_block_, cond) << " " << rt
1769b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt2 << ", "
1770b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << PrintMemOperand(kLoadDoubleWordLocation, operand);
177188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
177288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
177388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrexh(Condition cond,
177488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
177588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
17767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrexh, kAddress | kLoadStore);
1777b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrexh) << ConditionPrinter(it_block_, cond) << " " << rt
1778b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kLoadHalfWordLocation, operand);
177988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
178088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
178188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrh(Condition cond,
178288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
178388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
178488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
17857f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrh, kAddress | kLoadStore);
1786b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrh) << ConditionPrinter(it_block_, cond) << size << " "
1787b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << PrintMemOperand(kLoadHalfWordLocation, operand);
178888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
178988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
179088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrh(Condition cond, Register rt, Label* label) {
17917f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrh, kAddress | kLoadStore);
1792b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrh) << ConditionPrinter(it_block_, cond) << " " << rt
1793b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", "
17941075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kLoadHalfWordLocation, label, GetCodeAddress() & ~3);
179588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
179688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
179788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrsb(Condition cond,
179888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         EncodingSize size,
179988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rt,
180088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const MemOperand& operand) {
18017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrsb, kAddress | kLoadStore);
1802b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrsb) << ConditionPrinter(it_block_, cond) << size << " "
1803b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << PrintMemOperand(kLoadSignedByteLocation, operand);
180488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
180588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
180688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrsb(Condition cond, Register rt, Label* label) {
18077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrsb, kAddress | kLoadStore);
1808b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrsb) << ConditionPrinter(it_block_, cond) << " " << rt
1809b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", "
18101075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kLoadSignedByteLocation, label, GetCodeAddress() & ~3);
181188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
181288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
181388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrsh(Condition cond,
181488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         EncodingSize size,
181588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rt,
181688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const MemOperand& operand) {
18177f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrsh, kAddress | kLoadStore);
1818b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrsh) << ConditionPrinter(it_block_, cond) << size << " "
1819b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << PrintMemOperand(kLoadSignedHalfWordLocation, operand);
182088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
182188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
182288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ldrsh(Condition cond, Register rt, Label* label) {
18237f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLdrsh, kAddress | kLoadStore);
1824b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLdrsh) << ConditionPrinter(it_block_, cond) << " " << rt
1825b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", "
18261075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kLoadSignedHalfWordLocation, label, GetCodeAddress() & ~3);
182788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
182888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
182988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::lsl(Condition cond,
183088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
183188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
183288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rm,
183388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
18347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLsl, kShift);
1835b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLsl) << ConditionPrinter(it_block_, cond) << size;
1836c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
183788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
1838c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
183988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1840c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
184188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
184288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
184388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::lsls(Condition cond,
184488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
184588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
184688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rm,
184788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
18487f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLsls, kShift);
1849b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLsls) << ConditionPrinter(it_block_, cond) << size;
1850c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
185188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
1852c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
185388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1854c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
185588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
185688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
185788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::lsr(Condition cond,
185888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
185988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
186088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rm,
186188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
18627f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLsr, kShift);
1863b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLsr) << ConditionPrinter(it_block_, cond) << size;
1864c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
186588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
1866c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
186788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1868c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
186988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
187088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
187188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::lsrs(Condition cond,
187288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
187388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
187488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rm,
187588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
18767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kLsrs, kShift);
1877b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kLsrs) << ConditionPrinter(it_block_, cond) << size;
1878c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
187988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
1880c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
188188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1882c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
188388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
188488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
188588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::mla(
188688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
18877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMla, kArithmetic);
1888b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMla) << ConditionPrinter(it_block_, cond) << " " << rd
1889b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
189088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
189188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
189288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::mlas(
189388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
18947f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMlas, kArithmetic);
1895b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMlas) << ConditionPrinter(it_block_, cond) << " " << rd
1896b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
189788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
189888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
189988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::mls(
190088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
19017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMls, kArithmetic);
1902b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMls) << ConditionPrinter(it_block_, cond) << " " << rd
1903b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
190488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
190588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
190688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::mov(Condition cond,
190788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
190888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
190988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
19107f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMov, kNoAttribute);
1911b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMov) << ConditionPrinter(it_block_, cond) << size << " "
1912b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
191388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
191488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
191588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::movs(Condition cond,
191688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
191788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
191888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
19197f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMovs, kNoAttribute);
1920b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMovs) << ConditionPrinter(it_block_, cond) << size << " "
1921b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
192288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
192388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
192488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::movt(Condition cond, Register rd, const Operand& operand) {
19257f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMovt, kNoAttribute);
1926b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMovt) << ConditionPrinter(it_block_, cond) << " " << rd
1927b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << operand;
192888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
192988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
193088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::movw(Condition cond, Register rd, const Operand& operand) {
19317f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMovw, kNoAttribute);
1932b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMovw) << ConditionPrinter(it_block_, cond) << " " << rd
1933b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << operand;
193488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
193588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
193688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::mrs(Condition cond, Register rd, SpecialRegister spec_reg) {
19377f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMrs, kNoAttribute);
1938b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMrs) << ConditionPrinter(it_block_, cond) << " " << rd
1939b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << spec_reg;
194088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
194188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
194288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::msr(Condition cond,
194388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       MaskedSpecialRegister spec_reg,
194488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
19457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMsr, kNoAttribute);
1946b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMsr) << ConditionPrinter(it_block_, cond) << " "
1947b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << spec_reg << ", " << operand;
194888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
194988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
195088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::mul(
195188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, EncodingSize size, Register rd, Register rn, Register rm) {
19527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMul, kArithmetic);
1953b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMul) << ConditionPrinter(it_block_, cond) << size << " "
1954b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
195588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
195688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
195788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::muls(Condition cond, Register rd, Register rn, Register rm) {
19587f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMuls, kArithmetic);
1959b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMuls) << ConditionPrinter(it_block_, cond) << " " << rd
1960b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm;
196188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
196288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
196388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::mvn(Condition cond,
196488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
196588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
196688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
19677f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMvn, kNoAttribute);
1968b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMvn) << ConditionPrinter(it_block_, cond) << size << " "
1969b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
197088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
197188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
197288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::mvns(Condition cond,
197388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
197488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
197588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
19767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kMvns, kNoAttribute);
1977b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kMvns) << ConditionPrinter(it_block_, cond) << size << " "
1978b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
197988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
198088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
198188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::nop(Condition cond, EncodingSize size) {
19827f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kNop, kNoAttribute);
1983b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kNop) << ConditionPrinter(it_block_, cond) << size;
198488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
198588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
198688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::orn(Condition cond,
198788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
198888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
198988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
19907f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kOrn, kBitwise);
1991b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kOrn) << ConditionPrinter(it_block_, cond);
1992c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
199388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
1994c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
199588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
1996c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
199788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
199888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
199988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::orns(Condition cond,
200088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
200188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
200288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
20037f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kOrns, kBitwise);
2004b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kOrns) << ConditionPrinter(it_block_, cond);
2005c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
200688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2007c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
200888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2009c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
201088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
201188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
201288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::orr(Condition cond,
201388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
201488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
201588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
201688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
20177f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kOrr, kBitwise);
2018b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kOrr) << ConditionPrinter(it_block_, cond) << size;
2019c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
202088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2021c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
202288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2023c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
202488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
202588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
202688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::orrs(Condition cond,
202788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
202888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
202988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
203088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
20317f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kOrrs, kBitwise);
2032b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kOrrs) << ConditionPrinter(it_block_, cond) << size;
2033c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
203488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2035c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
203688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2037c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
203888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
203988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
204088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pkhbt(Condition cond,
204188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
204288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
204388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const Operand& operand) {
20447f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPkhbt, kNoAttribute);
2045b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPkhbt) << ConditionPrinter(it_block_, cond);
2046c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
204788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2048c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
204988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2050c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
205188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
205288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
205388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pkhtb(Condition cond,
205488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
205588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
205688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const Operand& operand) {
20577f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPkhtb, kNoAttribute);
2058b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPkhtb) << ConditionPrinter(it_block_, cond);
2059c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
206088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2061c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
206288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2063c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
206488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
206588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
206688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pld(Condition cond, Label* label) {
20677f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPld, kAddress);
2068b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPld) << ConditionPrinter(it_block_, cond) << " "
20691075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kDataLocation, label, GetCodeAddress() & ~3);
207088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
207188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
207288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pld(Condition cond, const MemOperand& operand) {
20737f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPld, kAddress);
2074b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPld) << ConditionPrinter(it_block_, cond) << " "
2075c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << PrintMemOperand(kDataLocation, operand);
207688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
207788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
207888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pldw(Condition cond, const MemOperand& operand) {
20797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPldw, kAddress);
2080b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPldw) << ConditionPrinter(it_block_, cond) << " "
2081c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << PrintMemOperand(kDataLocation, operand);
208288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
208388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
208488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pli(Condition cond, const MemOperand& operand) {
20857f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPli, kAddress);
2086b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPli) << ConditionPrinter(it_block_, cond) << " "
2087c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << PrintMemOperand(kCodeLocation, operand);
208888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
208988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
209088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pli(Condition cond, Label* label) {
20917f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPli, kAddress);
2092b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPli) << ConditionPrinter(it_block_, cond) << " "
20931075d15db3f11224e70960ed653462064018a001Vincent Belliard       << PrintLabel(kCodeLocation, label, GetCodeAddress() & ~3);
209488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
209588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
209688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pop(Condition cond,
209788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
209888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       RegisterList registers) {
20997f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPop, kLoadStore | kLoadStoreMultiple);
2100b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPop) << ConditionPrinter(it_block_, cond) << size << " "
2101c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << registers;
210288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
210388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
210488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::pop(Condition cond, EncodingSize size, Register rt) {
21057f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPop, kLoadStore | kLoadStoreMultiple);
2106b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPop) << ConditionPrinter(it_block_, cond) << size << " "
2107c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "{" << rt << "}";
210888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
210988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
211088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::push(Condition cond,
211188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
211288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        RegisterList registers) {
21137f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPush, kLoadStore | kLoadStoreMultiple);
2114b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPush) << ConditionPrinter(it_block_, cond) << size << " "
2115c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << registers;
211688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
211788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
211888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::push(Condition cond, EncodingSize size, Register rt) {
21197f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kPush, kLoadStore | kLoadStoreMultiple);
2120b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kPush) << ConditionPrinter(it_block_, cond) << size << " "
2121c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "{" << rt << "}";
212288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
212388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
212488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qadd(Condition cond, Register rd, Register rm, Register rn) {
21257f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQadd, kArithmetic);
2126b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQadd) << ConditionPrinter(it_block_, cond);
2127c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
212888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
2129c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
213088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2131c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << rn;
213288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
213388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
213488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qadd16(Condition cond,
213588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
213688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
213788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
21387f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQadd16, kArithmetic);
2139b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQadd16) << ConditionPrinter(it_block_, cond);
2140c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
214188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2142c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
214388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2144c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
214588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
214688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
214788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qadd8(Condition cond,
214888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
214988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
215088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
21517f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQadd8, kArithmetic);
2152b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQadd8) << ConditionPrinter(it_block_, cond);
2153c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
215488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2155c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
215688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2157c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
215888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
215988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
216088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qasx(Condition cond, Register rd, Register rn, Register rm) {
21617f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQasx, kArithmetic);
2162b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQasx) << ConditionPrinter(it_block_, cond);
2163c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
216488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2165c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
216688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2167c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
216888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
216988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
217088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qdadd(Condition cond,
217188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
217288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm,
217388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn) {
21747f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQdadd, kArithmetic);
2175b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQdadd) << ConditionPrinter(it_block_, cond);
2176c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
217788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
2178c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
217988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2180c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << rn;
218188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
218288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
218388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qdsub(Condition cond,
218488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
218588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm,
218688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn) {
21877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQdsub, kArithmetic);
2188b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQdsub) << ConditionPrinter(it_block_, cond);
2189c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
219088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
2191c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
219288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2193c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << rn;
219488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
219588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
219688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qsax(Condition cond, Register rd, Register rn, Register rm) {
21977f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQsax, kArithmetic);
2198b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQsax) << ConditionPrinter(it_block_, cond);
2199c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
220088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2201c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
220288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2203c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
220488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
220588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
220688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qsub(Condition cond, Register rd, Register rm, Register rn) {
22077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQsub, kArithmetic);
2208b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQsub) << ConditionPrinter(it_block_, cond);
2209c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
221088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
2211c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
221288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2213c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << rn;
221488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
221588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
221688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qsub16(Condition cond,
221788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
221888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
221988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
22207f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQsub16, kArithmetic);
2221b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQsub16) << ConditionPrinter(it_block_, cond);
2222c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
222388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2224c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
222588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2226c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
222788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
222888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
222988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::qsub8(Condition cond,
223088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
223188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
223288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
22337f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kQsub8, kArithmetic);
2234b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kQsub8) << ConditionPrinter(it_block_, cond);
2235c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
223688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2237c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
223888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2239c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
224088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
224188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
224288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rbit(Condition cond, Register rd, Register rm) {
22437f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRbit, kNoAttribute);
2244b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRbit) << ConditionPrinter(it_block_, cond) << " " << rd
2245b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rm;
224688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
224788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
224888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rev(Condition cond,
224988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
225088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
225188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rm) {
22527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRev, kNoAttribute);
2253b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRev) << ConditionPrinter(it_block_, cond) << size << " "
2254b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
225588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
225688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
225788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rev16(Condition cond,
225888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         EncodingSize size,
225988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
226088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
22617f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRev16, kNoAttribute);
2262b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRev16) << ConditionPrinter(it_block_, cond) << size << " "
2263b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
226488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
226588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
226688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::revsh(Condition cond,
226788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         EncodingSize size,
226888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
226988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
22707f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRevsh, kNoAttribute);
2271b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRevsh) << ConditionPrinter(it_block_, cond) << size << " "
2272b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
227388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
227488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
227588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ror(Condition cond,
227688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
227788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
227888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rm,
227988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
22807f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRor, kShift);
2281b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRor) << ConditionPrinter(it_block_, cond) << size;
2282c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
228388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
2284c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
228588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2286c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
228788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
228888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
228988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rors(Condition cond,
229088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
229188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
229288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rm,
229388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
22947f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRors, kShift);
2295b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRors) << ConditionPrinter(it_block_, cond) << size;
2296c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
229788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
2298c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
229988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2300c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
230188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
230288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
230388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rrx(Condition cond, Register rd, Register rm) {
23047f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRrx, kShift);
2305b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRrx) << ConditionPrinter(it_block_, cond);
2306c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
230788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
2308c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
230988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2310c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm;
231188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
231288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
231388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rrxs(Condition cond, Register rd, Register rm) {
23147f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRrxs, kShift);
2315b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRrxs) << ConditionPrinter(it_block_, cond);
2316c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
231788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
2318c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
231988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2320c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm;
232188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
232288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
232388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rsb(Condition cond,
232488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
232588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
232688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
232788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
23287f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRsb, kArithmetic);
2329b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRsb) << ConditionPrinter(it_block_, cond) << size;
2330c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
233188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2332c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
233388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2334c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
233588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
233688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
233788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rsbs(Condition cond,
233888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
233988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
234088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
234188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
23427f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRsbs, kArithmetic);
2343b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRsbs) << ConditionPrinter(it_block_, cond) << size;
2344c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
234588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2346c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
234788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2348c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
234988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
235088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
235188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rsc(Condition cond,
235288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
235388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
235488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
23557f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRsc, kArithmetic);
2356b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRsc) << ConditionPrinter(it_block_, cond);
2357c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
235888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2359c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
236088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2361c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
236288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
236388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
236488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::rscs(Condition cond,
236588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
236688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
236788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
23687f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kRscs, kArithmetic);
2369b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kRscs) << ConditionPrinter(it_block_, cond);
2370c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
237188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2372c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
237388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2374c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
237588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
237688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
237788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sadd16(Condition cond,
237888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
237988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
238088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
23817f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSadd16, kArithmetic);
2382b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSadd16) << ConditionPrinter(it_block_, cond);
2383c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
238488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2385c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
238688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2387c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
238888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
238988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
239088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sadd8(Condition cond,
239188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
239288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
239388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
23947f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSadd8, kArithmetic);
2395b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSadd8) << ConditionPrinter(it_block_, cond);
2396c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
239788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2398c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
239988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2400c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
240188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
240288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
240388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sasx(Condition cond, Register rd, Register rn, Register rm) {
24047f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSasx, kArithmetic);
2405b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSasx) << ConditionPrinter(it_block_, cond);
2406c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
240788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2408c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
240988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2410c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
241188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
241288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
241388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sbc(Condition cond,
241488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
241588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
241688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
241788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
24187f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSbc, kArithmetic);
2419b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSbc) << ConditionPrinter(it_block_, cond) << size;
2420c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
242188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2422c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
242388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2424c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
242588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
242688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
242788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sbcs(Condition cond,
242888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
242988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
243088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
243188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
24327f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSbcs, kArithmetic);
2433b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSbcs) << ConditionPrinter(it_block_, cond) << size;
2434c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
243588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2436c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
243788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2438c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
243988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
244088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
244188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sbfx(Condition cond,
244288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
244388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
244488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t lsb,
244588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
24467f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSbfx, kShift);
2447b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSbfx) << ConditionPrinter(it_block_, cond) << " " << rd
2448b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", "
2449c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << lsb << ", " << operand;
245088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
245188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
245288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sdiv(Condition cond, Register rd, Register rn, Register rm) {
24537f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSdiv, kArithmetic);
2454b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSdiv) << ConditionPrinter(it_block_, cond);
2455c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
245688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2457c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
245888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2459c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
246088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
246188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
246288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sel(Condition cond, Register rd, Register rn, Register rm) {
24637f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSel, kNoAttribute);
2464b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSel) << ConditionPrinter(it_block_, cond);
2465c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
246688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2467c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
246888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2469c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
247088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
247188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
247288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::shadd16(Condition cond,
247388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
247488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
247588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
24767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kShadd16, kArithmetic);
2477b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kShadd16) << ConditionPrinter(it_block_, cond);
2478c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
247988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2480c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
248188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2482c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
248388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
248488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
248588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::shadd8(Condition cond,
248688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
248788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
248888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
24897f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kShadd8, kArithmetic);
2490b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kShadd8) << ConditionPrinter(it_block_, cond);
2491c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
249288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2493c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
249488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2495c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
249688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
249788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
249888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::shasx(Condition cond,
249988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
250088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
250188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
25027f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kShasx, kArithmetic);
2503b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kShasx) << ConditionPrinter(it_block_, cond);
2504c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
250588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2506c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
250788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2508c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
250988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
251088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
251188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::shsax(Condition cond,
251288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
251388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
251488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
25157f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kShsax, kArithmetic);
2516b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kShsax) << ConditionPrinter(it_block_, cond);
2517c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
251888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2519c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
252088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2521c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
252288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
252388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
252488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::shsub16(Condition cond,
252588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
252688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
252788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
25287f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kShsub16, kArithmetic);
2529b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kShsub16) << ConditionPrinter(it_block_, cond);
2530c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
253188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2532c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
253388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2534c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
253588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
253688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
253788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::shsub8(Condition cond,
253888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
253988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
254088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
25417f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kShsub8, kArithmetic);
2542b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kShsub8) << ConditionPrinter(it_block_, cond);
2543c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
254488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2545c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
254688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2547c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
254888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
254988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
255088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlabb(
255188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
25527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlabb, kArithmetic);
2553b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlabb) << ConditionPrinter(it_block_, cond) << " " << rd
2554b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
255588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
255688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
255788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlabt(
255888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
25597f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlabt, kArithmetic);
2560b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlabt) << ConditionPrinter(it_block_, cond) << " " << rd
2561b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
256288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
256388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
256488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlad(
256588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
25667f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlad, kArithmetic);
2567b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlad) << ConditionPrinter(it_block_, cond) << " " << rd
2568b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
256988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
257088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
257188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smladx(
257288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
25737f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmladx, kArithmetic);
2574b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmladx) << ConditionPrinter(it_block_, cond) << " " << rd
2575b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
257688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
257788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
257888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlal(
257988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
25807f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlal, kArithmetic);
2581b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlal) << ConditionPrinter(it_block_, cond) << " " << rdlo
2582b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
258388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
258488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
258588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlalbb(
258688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
25877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlalbb, kArithmetic);
2588b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlalbb) << ConditionPrinter(it_block_, cond) << " "
2589b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rdlo << ", " << rdhi << ", " << rn << ", " << rm;
259088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
259188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
259288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlalbt(
259388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
25947f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlalbt, kArithmetic);
2595b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlalbt) << ConditionPrinter(it_block_, cond) << " "
2596b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rdlo << ", " << rdhi << ", " << rn << ", " << rm;
259788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
259888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
259988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlald(
260088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
26017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlald, kArithmetic);
2602b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlald) << ConditionPrinter(it_block_, cond) << " " << rdlo
2603b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
260488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
260588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
260688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlaldx(
260788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
26087f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlaldx, kArithmetic);
2609b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlaldx) << ConditionPrinter(it_block_, cond) << " "
2610b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rdlo << ", " << rdhi << ", " << rn << ", " << rm;
261188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
261288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
261388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlals(
261488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
26157f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlals, kArithmetic);
2616b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlals) << ConditionPrinter(it_block_, cond) << " " << rdlo
2617b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
261888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
261988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
262088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlaltb(
262188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
26227f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlaltb, kArithmetic);
2623b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlaltb) << ConditionPrinter(it_block_, cond) << " "
2624b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rdlo << ", " << rdhi << ", " << rn << ", " << rm;
262588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
262688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
262788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlaltt(
262888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
26297f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlaltt, kArithmetic);
2630b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlaltt) << ConditionPrinter(it_block_, cond) << " "
2631b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rdlo << ", " << rdhi << ", " << rn << ", " << rm;
263288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
263388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
263488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlatb(
263588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
26367f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlatb, kArithmetic);
2637b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlatb) << ConditionPrinter(it_block_, cond) << " " << rd
2638b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
263988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
264088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
264188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlatt(
264288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
26437f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlatt, kArithmetic);
2644b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlatt) << ConditionPrinter(it_block_, cond) << " " << rd
2645b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
264688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
264788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
264888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlawb(
264988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
26507f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlawb, kArithmetic);
2651b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlawb) << ConditionPrinter(it_block_, cond) << " " << rd
2652b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
265388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
265488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
265588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlawt(
265688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
26577f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlawt, kArithmetic);
2658b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlawt) << ConditionPrinter(it_block_, cond) << " " << rd
2659b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
266088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
266188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
266288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlsd(
266388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
26647f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlsd, kArithmetic);
2665b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlsd) << ConditionPrinter(it_block_, cond) << " " << rd
2666b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
266788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
266888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
266988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlsdx(
267088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
26717f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlsdx, kArithmetic);
2672b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlsdx) << ConditionPrinter(it_block_, cond) << " " << rd
2673b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
267488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
267588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
267688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlsld(
267788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
26787f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlsld, kArithmetic);
2679b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlsld) << ConditionPrinter(it_block_, cond) << " " << rdlo
2680b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
268188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
268288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
268388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smlsldx(
268488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
26857f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmlsldx, kArithmetic);
2686b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmlsldx) << ConditionPrinter(it_block_, cond) << " "
2687b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rdlo << ", " << rdhi << ", " << rn << ", " << rm;
268888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
268988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
269088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smmla(
269188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
26927f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmmla, kArithmetic);
2693b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmmla) << ConditionPrinter(it_block_, cond) << " " << rd
2694b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
269588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
269688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
269788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smmlar(
269888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
26997f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmmlar, kArithmetic);
2700b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmmlar) << ConditionPrinter(it_block_, cond) << " " << rd
2701b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
270288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
270388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
270488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smmls(
270588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
27067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmmls, kArithmetic);
2707b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmmls) << ConditionPrinter(it_block_, cond) << " " << rd
2708b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
270988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
271088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
271188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smmlsr(
271288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
27137f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmmlsr, kArithmetic);
2714b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmmlsr) << ConditionPrinter(it_block_, cond) << " " << rd
2715b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
271688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
271788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
271888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smmul(Condition cond,
271988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
272088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
272188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
27227f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmmul, kArithmetic);
2723b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmmul) << ConditionPrinter(it_block_, cond);
2724c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
272588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2726c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
272788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2728c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
272988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
273088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
273188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smmulr(Condition cond,
273288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
273388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
273488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
27357f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmmulr, kArithmetic);
2736b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmmulr) << ConditionPrinter(it_block_, cond);
2737c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
273888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2739c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
274088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2741c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
274288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
274388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
274488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smuad(Condition cond,
274588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
274688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
274788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
27487f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmuad, kArithmetic);
2749b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmuad) << ConditionPrinter(it_block_, cond);
2750c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
275188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2752c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
275388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2754c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
275588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
275688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
275788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smuadx(Condition cond,
275888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
275988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
276088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
27617f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmuadx, kArithmetic);
2762b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmuadx) << ConditionPrinter(it_block_, cond);
2763c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
276488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2765c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
276688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2767c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
276888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
276988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
277088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smulbb(Condition cond,
277188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
277288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
277388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
27747f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmulbb, kArithmetic);
2775b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmulbb) << ConditionPrinter(it_block_, cond);
2776c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
277788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2778c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
277988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2780c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
278188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
278288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
278388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smulbt(Condition cond,
278488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
278588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
278688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
27877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmulbt, kArithmetic);
2788b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmulbt) << ConditionPrinter(it_block_, cond);
2789c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
279088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2791c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
279288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2793c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
279488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
279588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
279688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smull(
279788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
27987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmull, kArithmetic);
2799b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmull) << ConditionPrinter(it_block_, cond) << " " << rdlo
2800b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
280188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
280288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
280388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smulls(
280488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
28057f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmulls, kArithmetic);
2806b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmulls) << ConditionPrinter(it_block_, cond) << " " << rdlo
2807b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
280888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
280988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
281088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smultb(Condition cond,
281188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
281288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
281388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
28147f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmultb, kArithmetic);
2815b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmultb) << ConditionPrinter(it_block_, cond);
2816c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
281788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2818c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
281988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2820c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
282188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
282288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
282388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smultt(Condition cond,
282488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
282588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
282688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
28277f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmultt, kArithmetic);
2828b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmultt) << ConditionPrinter(it_block_, cond);
2829c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
283088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2831c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
283288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2833c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
283488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
283588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
283688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smulwb(Condition cond,
283788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
283888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
283988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
28407f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmulwb, kArithmetic);
2841b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmulwb) << ConditionPrinter(it_block_, cond);
2842c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
284388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2844c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
284588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2846c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
284788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
284888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
284988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smulwt(Condition cond,
285088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
285188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
285288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
28537f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmulwt, kArithmetic);
2854b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmulwt) << ConditionPrinter(it_block_, cond);
2855c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
285688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2857c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
285888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2859c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
286088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
286188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
286288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smusd(Condition cond,
286388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
286488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
286588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
28667f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmusd, kArithmetic);
2867b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmusd) << ConditionPrinter(it_block_, cond);
2868c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
286988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2870c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
287188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2872c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
287388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
287488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
287588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::smusdx(Condition cond,
287688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
287788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
287888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
28797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSmusdx, kArithmetic);
2880b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSmusdx) << ConditionPrinter(it_block_, cond);
2881c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
288288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2883c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
288488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2885c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
288688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
288788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
288888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ssat(Condition cond,
288988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
289088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm,
289188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
28927f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSsat, kArithmetic);
2893b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSsat) << ConditionPrinter(it_block_, cond) << " " << rd
2894b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", "
2895c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << imm << ", " << operand;
289688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
289788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
289888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ssat16(Condition cond,
289988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
290088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm,
290188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn) {
29027f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSsat16, kArithmetic);
2903b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSsat16) << ConditionPrinter(it_block_, cond) << " " << rd
2904b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", "
2905c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << imm << ", " << rn;
290688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
290788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
290888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ssax(Condition cond, Register rd, Register rn, Register rm) {
29097f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSsax, kArithmetic);
2910b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSsax) << ConditionPrinter(it_block_, cond);
2911c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
291288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2913c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
291488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2915c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
291688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
291788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
291888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ssub16(Condition cond,
291988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
292088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
292188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
29227f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSsub16, kArithmetic);
2923b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSsub16) << ConditionPrinter(it_block_, cond);
2924c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
292588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2926c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
292788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2928c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
292988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
293088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
293188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ssub8(Condition cond,
293288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
293388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
293488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
29357f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSsub8, kArithmetic);
2936b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSsub8) << ConditionPrinter(it_block_, cond);
2937c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
293888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
2939c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
294088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
2941c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
294288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
294388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
294488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stl(Condition cond, Register rt, const MemOperand& operand) {
29457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStl, kAddress | kLoadStore);
2946b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStl) << ConditionPrinter(it_block_, cond) << " " << rt
2947b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kStoreWordLocation, operand);
294888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
294988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
295088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stlb(Condition cond,
295188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
295288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
29537f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStlb, kAddress | kLoadStore);
2954b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStlb) << ConditionPrinter(it_block_, cond) << " " << rt
2955b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kStoreByteLocation, operand);
295688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
295788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
295888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stlex(Condition cond,
295988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
296088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rt,
296188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const MemOperand& operand) {
29627f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStlex, kAddress | kLoadStore);
2963b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStlex) << ConditionPrinter(it_block_, cond) << " " << rd
2964b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", " << PrintMemOperand(kStoreWordLocation, operand);
296588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
296688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
296788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stlexb(Condition cond,
296888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
296988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
297088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
29717f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStlexb, kAddress | kLoadStore);
2972b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStlexb) << ConditionPrinter(it_block_, cond) << " " << rd
2973b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", " << PrintMemOperand(kStoreByteLocation, operand);
297488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
297588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
297688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stlexd(Condition cond,
297788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
297888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
297988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt2,
298088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
29817f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStlexd, kAddress | kLoadStore);
2982b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStlexd) << ConditionPrinter(it_block_, cond) << " " << rd
2983b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", " << rt2 << ", "
2984c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << PrintMemOperand(kStoreDoubleWordLocation, operand);
298588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
298688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
298788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stlexh(Condition cond,
298888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
298988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
299088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
29917f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStlexh, kAddress | kLoadStore);
2992b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStlexh) << ConditionPrinter(it_block_, cond) << " " << rd
2993b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", "
2994b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << PrintMemOperand(kStoreHalfWordLocation, operand);
299588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
299688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
299788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stlh(Condition cond,
299888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
299988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
30007f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStlh, kAddress | kLoadStore);
3001b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStlh) << ConditionPrinter(it_block_, cond) << " " << rt
3002b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << PrintMemOperand(kStoreHalfWordLocation, operand);
300388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
300488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
300588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stm(Condition cond,
300688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
300788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
300888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       WriteBack write_back,
300988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       RegisterList registers) {
30107f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStm, kLoadStore | kLoadStoreMultiple);
3011b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStm) << ConditionPrinter(it_block_, cond) << size << " "
3012b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << registers;
301388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
301488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
301588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stmda(Condition cond,
301688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
301788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
301888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
30197f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStmda, kLoadStore | kLoadStoreMultiple);
3020b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStmda) << ConditionPrinter(it_block_, cond) << " " << rn
3021c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
302288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
302388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
302488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stmdb(Condition cond,
302588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         EncodingSize size,
302688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
302788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
302888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
30297f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStmdb, kLoadStore | kLoadStoreMultiple);
3030b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStmdb) << ConditionPrinter(it_block_, cond) << size << " "
3031b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << registers;
303288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
303388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
303488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stmea(Condition cond,
303588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         EncodingSize size,
303688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
303788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
303888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
30397f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStmea, kLoadStore | kLoadStoreMultiple);
3040b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStmea) << ConditionPrinter(it_block_, cond) << size << " "
3041b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << registers;
304288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
304388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
304488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stmed(Condition cond,
304588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
304688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
304788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
30487f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStmed, kLoadStore | kLoadStoreMultiple);
3049b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStmed) << ConditionPrinter(it_block_, cond) << " " << rn
3050c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
305188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
305288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
305388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stmfa(Condition cond,
305488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
305588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
305688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
30577f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStmfa, kLoadStore | kLoadStoreMultiple);
3058b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStmfa) << ConditionPrinter(it_block_, cond) << " " << rn
3059c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
306088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
306188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
306288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stmfd(Condition cond,
306388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
306488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
306588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
30667f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStmfd, kLoadStore | kLoadStoreMultiple);
3067b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStmfd) << ConditionPrinter(it_block_, cond) << " " << rn
3068c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
306988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
307088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
307188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::stmib(Condition cond,
307288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
307388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         WriteBack write_back,
307488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         RegisterList registers) {
30757f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStmib, kLoadStore | kLoadStoreMultiple);
3076b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStmib) << ConditionPrinter(it_block_, cond) << " " << rn
3077c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << write_back << ", " << registers;
307888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
307988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
308088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::str(Condition cond,
308188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
308288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rt,
308388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const MemOperand& operand) {
30847f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStr, kAddress | kLoadStore);
3085b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStr) << ConditionPrinter(it_block_, cond) << size << " "
3086b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << PrintMemOperand(kStoreWordLocation, operand);
308788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
308888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
308988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::strb(Condition cond,
309088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
309188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
309288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
30937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStrb, kAddress | kLoadStore);
3094b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStrb) << ConditionPrinter(it_block_, cond) << size << " "
3095b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << PrintMemOperand(kStoreByteLocation, operand);
309688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
309788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
309888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::strd(Condition cond,
309988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
310088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt2,
310188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
31027f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStrd, kAddress | kLoadStore);
3103b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStrd) << ConditionPrinter(it_block_, cond) << " " << rt
3104b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt2 << ", "
3105b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << PrintMemOperand(kStoreDoubleWordLocation, operand);
310688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
310788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
310888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::strex(Condition cond,
310988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
311088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rt,
311188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const MemOperand& operand) {
31127f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStrex, kAddress | kLoadStore);
3113b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStrex) << ConditionPrinter(it_block_, cond) << " " << rd
3114b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", " << PrintMemOperand(kStoreWordLocation, operand);
311588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
311688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
311788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::strexb(Condition cond,
311888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
311988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
312088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
31217f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStrexb, kAddress | kLoadStore);
3122b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStrexb) << ConditionPrinter(it_block_, cond) << " " << rd
3123b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", " << PrintMemOperand(kStoreByteLocation, operand);
312488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
312588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
312688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::strexd(Condition cond,
312788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
312888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
312988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt2,
313088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
31317f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStrexd, kAddress | kLoadStore);
3132b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStrexd) << ConditionPrinter(it_block_, cond) << " " << rd
3133b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", " << rt2 << ", "
3134c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << PrintMemOperand(kStoreDoubleWordLocation, operand);
313588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
313688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
313788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::strexh(Condition cond,
313888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
313988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rt,
314088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const MemOperand& operand) {
31417f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStrexh, kAddress | kLoadStore);
3142b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStrexh) << ConditionPrinter(it_block_, cond) << " " << rd
3143b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", "
3144b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << PrintMemOperand(kStoreHalfWordLocation, operand);
314588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
314688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
314788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::strh(Condition cond,
314888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
314988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
315088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
31517f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kStrh, kAddress | kLoadStore);
3152b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kStrh) << ConditionPrinter(it_block_, cond) << size << " "
3153b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << PrintMemOperand(kStoreHalfWordLocation, operand);
315488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
315588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
315688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sub(Condition cond,
315788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
315888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rd,
315988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
316088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
31617f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSub, kArithmetic);
3162b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSub) << ConditionPrinter(it_block_, cond) << size;
3163c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
316488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3165c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
316688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3167c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
316888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
316988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
317088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sub(Condition cond, Register rd, const Operand& operand) {
31717f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSub, kArithmetic);
3172b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSub) << ConditionPrinter(it_block_, cond) << " " << rd
3173b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << operand;
317488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
317588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
317688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::subs(Condition cond,
317788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
317888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
317988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
318088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
31817f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSubs, kArithmetic);
3182b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSubs) << ConditionPrinter(it_block_, cond) << size;
3183c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
318488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3185c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
318688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3187c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
318888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
318988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
319088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::subs(Register rd, const Operand& operand) {
31917f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSubs, kArithmetic);
3192b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSubs) << " " << rd << ", " << operand;
319388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
319488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
319588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::subw(Condition cond,
319688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
319788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
319888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
31997f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSubw, kArithmetic);
3200b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSubw) << ConditionPrinter(it_block_, cond);
3201c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
320288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3203c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
320488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3205c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
320688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
320788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
320888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::svc(Condition cond, uint32_t imm) {
32097f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSvc, kSystem);
3210b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSvc) << ConditionPrinter(it_block_, cond) << " " << imm;
321188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
321288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
321388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sxtab(Condition cond,
321488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
321588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
321688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const Operand& operand) {
32177f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSxtab, kArithmetic);
3218b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSxtab) << ConditionPrinter(it_block_, cond);
3219c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
322088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3221c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
322288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3223c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
322488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
322588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
322688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sxtab16(Condition cond,
322788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
322888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
322988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           const Operand& operand) {
32307f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSxtab16, kArithmetic);
3231b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSxtab16) << ConditionPrinter(it_block_, cond);
3232c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
323388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3234c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
323588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3236c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
323788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
323888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
323988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sxtah(Condition cond,
324088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
324188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
324288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const Operand& operand) {
32437f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSxtah, kArithmetic);
3244b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSxtah) << ConditionPrinter(it_block_, cond);
3245c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
324688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3247c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
324888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3249c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
325088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
325188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
325288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sxtb(Condition cond,
325388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
325488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
325588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
32567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSxtb, kArithmetic);
3257b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSxtb) << ConditionPrinter(it_block_, cond) << size;
3258c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
325988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(operand.GetBaseRegister())) {
3260c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
326188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3262c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << operand;
326388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
326488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
326588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sxtb16(Condition cond, Register rd, const Operand& operand) {
32667f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSxtb16, kArithmetic);
3267b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSxtb16) << ConditionPrinter(it_block_, cond);
3268c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
326988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(operand.GetBaseRegister())) {
3270c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
327188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3272c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << operand;
327388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
327488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
327588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::sxth(Condition cond,
327688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
327788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
327888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
32797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kSxth, kArithmetic);
3280b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kSxth) << ConditionPrinter(it_block_, cond) << size;
3281c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
328288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(operand.GetBaseRegister())) {
3283c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
328488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3285c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << operand;
328688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
328788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
328888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::tbb(Condition cond, Register rn, Register rm) {
32897f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kTbb, kBranch);
3290b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kTbb) << ConditionPrinter(it_block_, cond) << " "
3291c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << MemOperand(rn, rm);
329288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
329388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
329488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::tbh(Condition cond, Register rn, Register rm) {
32957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kTbh, kBranch);
3296b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kTbh) << ConditionPrinter(it_block_, cond) << " "
3297c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << MemOperand(rn, plus, rm, LSL, 1);
329888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
329988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
330088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::teq(Condition cond, Register rn, const Operand& operand) {
33017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kTeq, kBitwise);
3302b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kTeq) << ConditionPrinter(it_block_, cond) << " " << rn
3303b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << operand;
330488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
330588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
330688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::tst(Condition cond,
330788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       EncodingSize size,
330888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       Register rn,
330988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                       const Operand& operand) {
33107f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kTst, kBitwise);
3311b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kTst) << ConditionPrinter(it_block_, cond) << size << " "
3312b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << ", " << operand;
331388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
331488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
331588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uadd16(Condition cond,
331688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
331788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
331888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
33197f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUadd16, kArithmetic);
3320b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUadd16) << ConditionPrinter(it_block_, cond);
3321c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
332288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3323c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
332488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3325c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
332688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
332788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
332888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uadd8(Condition cond,
332988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
333088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
333188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
33327f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUadd8, kArithmetic);
3333b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUadd8) << ConditionPrinter(it_block_, cond);
3334c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
333588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3336c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
333788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3338c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
333988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
334088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
334188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uasx(Condition cond, Register rd, Register rn, Register rm) {
33427f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUasx, kArithmetic);
3343b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUasx) << ConditionPrinter(it_block_, cond);
3344c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
334588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3346c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
334788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3348c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
334988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
335088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
335188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::ubfx(Condition cond,
335288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
335388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
335488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t lsb,
335588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
33567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUbfx, kShift);
3357b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUbfx) << ConditionPrinter(it_block_, cond) << " " << rd
3358b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", "
3359c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << lsb << ", " << operand;
336088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
336188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
336288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::udf(Condition cond, EncodingSize size, uint32_t imm) {
33637f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUdf, kNoAttribute);
3364b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUdf) << ConditionPrinter(it_block_, cond) << size << " "
3365b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << imm;
336688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
336788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
336888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::udiv(Condition cond, Register rd, Register rn, Register rm) {
33697f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUdiv, kArithmetic);
3370b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUdiv) << ConditionPrinter(it_block_, cond);
3371c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
337288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3373c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
337488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3375c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
337688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
337788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
337888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uhadd16(Condition cond,
337988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
338088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
338188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
33827f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUhadd16, kArithmetic);
3383b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUhadd16) << ConditionPrinter(it_block_, cond);
3384c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
338588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3386c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
338788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3388c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
338988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
339088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
339188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uhadd8(Condition cond,
339288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
339388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
339488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
33957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUhadd8, kArithmetic);
3396b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUhadd8) << ConditionPrinter(it_block_, cond);
3397c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
339888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3399c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
340088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3401c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
340288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
340388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
340488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uhasx(Condition cond,
340588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
340688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
340788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
34087f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUhasx, kArithmetic);
3409b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUhasx) << ConditionPrinter(it_block_, cond);
3410c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
341188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3412c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
341388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3414c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
341588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
341688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
341788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uhsax(Condition cond,
341888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
341988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
342088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
34217f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUhsax, kArithmetic);
3422b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUhsax) << ConditionPrinter(it_block_, cond);
3423c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
342488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3425c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
342688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3427c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
342888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
342988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
343088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uhsub16(Condition cond,
343188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
343288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
343388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
34347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUhsub16, kArithmetic);
3435b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUhsub16) << ConditionPrinter(it_block_, cond);
3436c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
343788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3438c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
343988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3440c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
344188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
344288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
344388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uhsub8(Condition cond,
344488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
344588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
344688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
34477f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUhsub8, kArithmetic);
3448b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUhsub8) << ConditionPrinter(it_block_, cond);
3449c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
345088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3451c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
345288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3453c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
345488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
345588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
345688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::umaal(
345788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
34587f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUmaal, kArithmetic);
3459b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUmaal) << ConditionPrinter(it_block_, cond) << " " << rdlo
3460b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
346188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
346288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
346388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::umlal(
346488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
34657f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUmlal, kArithmetic);
3466b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUmlal) << ConditionPrinter(it_block_, cond) << " " << rdlo
3467b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
346888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
346988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
347088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::umlals(
347188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
34727f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUmlals, kArithmetic);
3473b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUmlals) << ConditionPrinter(it_block_, cond) << " " << rdlo
3474b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
347588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
347688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
347788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::umull(
347888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
34797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUmull, kArithmetic);
3480b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUmull) << ConditionPrinter(it_block_, cond) << " " << rdlo
3481b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
348288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
348388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
348488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::umulls(
348588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
34867f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUmulls, kArithmetic);
3487b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUmulls) << ConditionPrinter(it_block_, cond) << " " << rdlo
3488b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rdhi << ", " << rn << ", " << rm;
348988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
349088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
349188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uqadd16(Condition cond,
349288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
349388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
349488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
34957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUqadd16, kArithmetic);
3496b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUqadd16) << ConditionPrinter(it_block_, cond);
3497c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
349888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3499c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
350088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3501c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
350288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
350388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
350488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uqadd8(Condition cond,
350588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
350688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
350788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
35087f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUqadd8, kArithmetic);
3509b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUqadd8) << ConditionPrinter(it_block_, cond);
3510c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
351188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3512c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
351388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3514c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
351588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
351688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
351788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uqasx(Condition cond,
351888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
351988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
352088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
35217f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUqasx, kArithmetic);
3522b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUqasx) << ConditionPrinter(it_block_, cond);
3523c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
352488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3525c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
352688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3527c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
352888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
352988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
353088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uqsax(Condition cond,
353188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
353288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
353388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
35347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUqsax, kArithmetic);
3535b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUqsax) << ConditionPrinter(it_block_, cond);
3536c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
353788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3538c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
353988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3540c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
354188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
354288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
354388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uqsub16(Condition cond,
354488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
354588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
354688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rm) {
35477f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUqsub16, kArithmetic);
3548b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUqsub16) << ConditionPrinter(it_block_, cond);
3549c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
355088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3551c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
355288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3553c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
355488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
355588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
355688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uqsub8(Condition cond,
355788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
355888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
355988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
35607f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUqsub8, kArithmetic);
3561b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUqsub8) << ConditionPrinter(it_block_, cond);
3562c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
356388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3564c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
356588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3566c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
356788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
356888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
356988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::usad8(Condition cond,
357088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
357188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
357288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
35737f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUsad8, kArithmetic);
3574b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUsad8) << ConditionPrinter(it_block_, cond);
3575c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
357688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3577c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
357888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3579c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
358088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
358188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
358288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::usada8(
358388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rd, Register rn, Register rm, Register ra) {
35847f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUsada8, kArithmetic);
3585b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUsada8) << ConditionPrinter(it_block_, cond) << " " << rd
3586b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn << ", " << rm << ", " << ra;
358788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
358888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
358988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::usat(Condition cond,
359088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
359188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm,
359288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
35937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUsat, kArithmetic);
3594b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUsat) << ConditionPrinter(it_block_, cond) << " " << rd
3595b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", "
3596c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << imm << ", " << operand;
359788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
359888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
359988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::usat16(Condition cond,
360088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
360188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm,
360288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn) {
36037f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUsat16, kArithmetic);
3604b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUsat16) << ConditionPrinter(it_block_, cond) << " " << rd
3605b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", "
3606c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << imm << ", " << rn;
360788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
360888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
360988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::usax(Condition cond, Register rd, Register rn, Register rm) {
36107f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUsax, kArithmetic);
3611b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUsax) << ConditionPrinter(it_block_, cond);
3612c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
361388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3614c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
361588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3616c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
361788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
361888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
361988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::usub16(Condition cond,
362088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rd,
362188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
362288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rm) {
36237f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUsub16, kArithmetic);
3624b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUsub16) << ConditionPrinter(it_block_, cond);
3625c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
362688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3627c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
362888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3629c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
363088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
363188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
363288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::usub8(Condition cond,
363388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
363488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
363588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rm) {
36367f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUsub8, kArithmetic);
3637b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUsub8) << ConditionPrinter(it_block_, cond);
3638c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
363988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3640c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
364188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3642c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
364388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
364488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
364588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uxtab(Condition cond,
364688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
364788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
364888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const Operand& operand) {
36497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUxtab, kArithmetic);
3650b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUxtab) << ConditionPrinter(it_block_, cond);
3651c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
365288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3653c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
365488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3655c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
365688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
365788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
365888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uxtab16(Condition cond,
365988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rd,
366088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register rn,
366188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           const Operand& operand) {
36627f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUxtab16, kArithmetic);
3663b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUxtab16) << ConditionPrinter(it_block_, cond);
3664c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
366588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3666c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
366788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3668c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
366988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
367088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
367188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uxtah(Condition cond,
367288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rd,
367388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register rn,
367488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const Operand& operand) {
36757f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUxtah, kArithmetic);
3676b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUxtah) << ConditionPrinter(it_block_, cond);
3677c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
367888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3679c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
368088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3681c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
368288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
368388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
368488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uxtb(Condition cond,
368588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
368688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
368788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
36887f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUxtb, kArithmetic);
3689b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUxtb) << ConditionPrinter(it_block_, cond) << size;
3690c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
369188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(operand.GetBaseRegister())) {
3692c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
369388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3694c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << operand;
369588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
369688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
369788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uxtb16(Condition cond, Register rd, const Operand& operand) {
36987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUxtb16, kArithmetic);
3699b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUxtb16) << ConditionPrinter(it_block_, cond);
3700c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
370188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(operand.GetBaseRegister())) {
3702c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
370388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3704c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << operand;
370588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
370688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
370788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::uxth(Condition cond,
370888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        EncodingSize size,
370988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rd,
371088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const Operand& operand) {
37117f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kUxth, kArithmetic);
3712b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kUxth) << ConditionPrinter(it_block_, cond) << size;
3713c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
371488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(operand.GetBaseRegister())) {
3715c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
371688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3717c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << operand;
371888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
371988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
372088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vaba(
372188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
37227f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVaba, kFpNeon);
3723b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVaba) << ConditionPrinter(it_block_, cond) << dt << " "
3724b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
372588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
372688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
372788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vaba(
372888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
37297f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVaba, kFpNeon);
3730b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVaba) << ConditionPrinter(it_block_, cond) << dt << " "
3731b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
373288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
373388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
373488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vabal(
373588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
37367f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVabal, kFpNeon);
3737b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVabal) << ConditionPrinter(it_block_, cond) << dt << " "
3738b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
373988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
374088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
374188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vabd(
374288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
37437f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVabd, kFpNeon);
3744b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVabd) << ConditionPrinter(it_block_, cond) << dt;
3745c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
374688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3747c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
374888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3749c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
375088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
375188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
375288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vabd(
375388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
37547f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVabd, kFpNeon);
3755b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVabd) << ConditionPrinter(it_block_, cond) << dt;
3756c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
375788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3758c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
375988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3760c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
376188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
376288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
376388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vabdl(
376488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
37657f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVabdl, kFpNeon);
3766b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVabdl) << ConditionPrinter(it_block_, cond) << dt << " "
3767b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
376888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
376988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
377088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vabs(Condition cond,
377188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
377288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
377388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
37747f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVabs, kFpNeon);
3775b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVabs) << ConditionPrinter(it_block_, cond) << dt << " "
3776b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
377788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
377888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
377988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vabs(Condition cond,
378088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
378188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
378288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
37837f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVabs, kFpNeon);
3784b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVabs) << ConditionPrinter(it_block_, cond) << dt << " "
3785b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
378688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
378788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
378888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vabs(Condition cond,
378988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
379088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rd,
379188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rm) {
37927f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVabs, kFpNeon);
3793b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVabs) << ConditionPrinter(it_block_, cond) << dt << " "
3794b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
379588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
379688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
379788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vacge(
379888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
37997f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVacge, kFpNeon);
3800b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVacge) << ConditionPrinter(it_block_, cond) << dt;
3801c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
380288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3803c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
380488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3805c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
380688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
380788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
380888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vacge(
380988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
38107f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVacge, kFpNeon);
3811b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVacge) << ConditionPrinter(it_block_, cond) << dt;
3812c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
381388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3814c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
381588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3816c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
381788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
381888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
381988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vacgt(
382088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
38217f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVacgt, kFpNeon);
3822b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVacgt) << ConditionPrinter(it_block_, cond) << dt;
3823c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
382488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3825c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
382688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3827c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
382888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
382988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
383088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vacgt(
383188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
38327f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVacgt, kFpNeon);
3833b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVacgt) << ConditionPrinter(it_block_, cond) << dt;
3834c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
383588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3836c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
383788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3838c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
383988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
384088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
384188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vacle(
384288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
38437f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVacle, kFpNeon);
3844b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVacle) << ConditionPrinter(it_block_, cond) << dt;
3845c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
384688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3847c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
384888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3849c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
385088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
385188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
385288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vacle(
385388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
38547f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVacle, kFpNeon);
3855b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVacle) << ConditionPrinter(it_block_, cond) << dt;
3856c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
385788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3858c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
385988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3860c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
386188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
386288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
386388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vaclt(
386488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
38657f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVaclt, kFpNeon);
3866b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVaclt) << ConditionPrinter(it_block_, cond) << dt;
3867c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
386888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3869c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
387088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3871c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
387288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
387388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
387488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vaclt(
387588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
38767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVaclt, kFpNeon);
3877b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVaclt) << ConditionPrinter(it_block_, cond) << dt;
3878c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
387988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3880c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
388188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3882c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
388388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
388488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
388588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vadd(
388688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
38877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVadd, kFpNeon);
3888b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVadd) << ConditionPrinter(it_block_, cond) << dt;
3889c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
389088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3891c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
389288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3893c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
389488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
389588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
389688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vadd(
389788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
38987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVadd, kFpNeon);
3899b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVadd) << ConditionPrinter(it_block_, cond) << dt;
3900c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
390188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3902c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
390388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3904c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
390588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
390688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
390788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vadd(
390888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
39097f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVadd, kFpNeon);
3910b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVadd) << ConditionPrinter(it_block_, cond) << dt;
3911c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
391288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3913c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
391488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3915c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
391688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
391788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
391888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vaddhn(
391988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
39207f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVaddhn, kFpNeon);
3921b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVaddhn) << ConditionPrinter(it_block_, cond) << dt << " "
3922b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
392388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
392488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
392588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vaddl(
392688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
39277f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVaddl, kFpNeon);
3928b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVaddl) << ConditionPrinter(it_block_, cond) << dt << " "
3929b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
393088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
393188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
393288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vaddw(
393388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm) {
39347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVaddw, kFpNeon);
3935b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVaddw) << ConditionPrinter(it_block_, cond) << dt;
3936c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
393788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3938c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
393988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3940c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
394188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
394288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
394388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vand(Condition cond,
394488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
394588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
394688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rn,
394788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
39487f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVand, kFpNeon);
3949b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVand) << ConditionPrinter(it_block_, cond) << dt;
3950c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
395188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3952c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
395388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3954c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
395588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
395688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
395788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vand(Condition cond,
395888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
395988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
396088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rn,
396188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
39627f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVand, kFpNeon);
3963b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVand) << ConditionPrinter(it_block_, cond) << dt;
3964c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
396588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3966c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
396788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3968c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
396988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
397088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
397188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vbic(Condition cond,
397288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
397388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
397488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rn,
397588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
39767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVbic, kFpNeon);
3977b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVbic) << ConditionPrinter(it_block_, cond) << dt;
3978c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
397988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3980c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
398188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3982c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
398388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
398488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
398588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vbic(Condition cond,
398688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
398788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
398888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rn,
398988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
39907f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVbic, kFpNeon);
3991b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVbic) << ConditionPrinter(it_block_, cond) << dt;
3992c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
399388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
3994c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
399588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3996c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
399788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
399888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
399988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vbif(
400088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
40017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVbif, kFpNeon);
4002b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVbif) << ConditionPrinter(it_block_, cond) << dt;
4003c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
400488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4005c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
400688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4007c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
400888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
400988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
401088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vbif(
401188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
40127f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVbif, kFpNeon);
4013b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVbif) << ConditionPrinter(it_block_, cond) << dt;
4014c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
401588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4016c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
401788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4018c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
401988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
402088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
402188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vbit(
402288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
40237f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVbit, kFpNeon);
4024b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVbit) << ConditionPrinter(it_block_, cond) << dt;
4025c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
402688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4027c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
402888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4029c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
403088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
403188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
403288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vbit(
403388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
40347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVbit, kFpNeon);
4035b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVbit) << ConditionPrinter(it_block_, cond) << dt;
4036c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
403788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4038c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
403988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4040c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
404188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
404288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
404388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vbsl(
404488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
40457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVbsl, kFpNeon);
4046b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVbsl) << ConditionPrinter(it_block_, cond) << dt;
4047c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
404888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4049c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
405088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4051c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
405288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
405388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
405488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vbsl(
405588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
40567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVbsl, kFpNeon);
4057b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVbsl) << ConditionPrinter(it_block_, cond) << dt;
4058c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
405988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4060c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
406188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4062c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
406388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
406488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
406588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vceq(Condition cond,
406688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
406788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
406888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
406988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
40707f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVceq, kFpNeon);
4071b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVceq) << ConditionPrinter(it_block_, cond) << dt;
4072c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
407388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4074c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
407588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4076c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
407788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
407888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
407988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vceq(Condition cond,
408088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
408188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
408288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
408388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
40847f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVceq, kFpNeon);
4085b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVceq) << ConditionPrinter(it_block_, cond) << dt;
4086c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
408788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4088c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
408988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4090c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
409188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
409288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
409388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vceq(
409488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
40957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVceq, kFpNeon);
4096b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVceq) << ConditionPrinter(it_block_, cond) << dt;
4097c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
409888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4099c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
410088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4101c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
410288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
410388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
410488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vceq(
410588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
41067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVceq, kFpNeon);
4107b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVceq) << ConditionPrinter(it_block_, cond) << dt;
4108c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
410988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4110c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
411188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4112c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
411388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
411488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
411588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcge(Condition cond,
411688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
411788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
411888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
411988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
41207f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcge, kFpNeon);
4121b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcge) << ConditionPrinter(it_block_, cond) << dt;
4122c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
412388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4124c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
412588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4126c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
412788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
412888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
412988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcge(Condition cond,
413088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
413188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
413288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
413388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
41347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcge, kFpNeon);
4135b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcge) << ConditionPrinter(it_block_, cond) << dt;
4136c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
413788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4138c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
413988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4140c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
414188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
414288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
414388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcge(
414488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
41457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcge, kFpNeon);
4146b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcge) << ConditionPrinter(it_block_, cond) << dt;
4147c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
414888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4149c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
415088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4151c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
415288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
415388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
415488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcge(
415588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
41567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcge, kFpNeon);
4157b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcge) << ConditionPrinter(it_block_, cond) << dt;
4158c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
415988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4160c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
416188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4162c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
416388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
416488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
416588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcgt(Condition cond,
416688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
416788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
416888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
416988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
41707f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcgt, kFpNeon);
4171b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcgt) << ConditionPrinter(it_block_, cond) << dt;
4172c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
417388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4174c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
417588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4176c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
417788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
417888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
417988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcgt(Condition cond,
418088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
418188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
418288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
418388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
41847f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcgt, kFpNeon);
4185b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcgt) << ConditionPrinter(it_block_, cond) << dt;
4186c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
418788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4188c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
418988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4190c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
419188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
419288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
419388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcgt(
419488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
41957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcgt, kFpNeon);
4196b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcgt) << ConditionPrinter(it_block_, cond) << dt;
4197c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
419888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4199c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
420088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4201c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
420288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
420388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
420488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcgt(
420588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
42067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcgt, kFpNeon);
4207b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcgt) << ConditionPrinter(it_block_, cond) << dt;
4208c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
420988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4210c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
421188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4212c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
421388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
421488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
421588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcle(Condition cond,
421688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
421788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
421888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
421988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
42207f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcle, kFpNeon);
4221b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcle) << ConditionPrinter(it_block_, cond) << dt;
4222c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
422388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4224c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
422588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4226c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
422788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
422888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
422988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcle(Condition cond,
423088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
423188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
423288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
423388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
42347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcle, kFpNeon);
4235b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcle) << ConditionPrinter(it_block_, cond) << dt;
4236c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
423788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4238c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
423988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4240c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
424188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
424288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
424388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcle(
424488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
42457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcle, kFpNeon);
4246b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcle) << ConditionPrinter(it_block_, cond) << dt;
4247c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
424888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4249c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
425088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4251c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
425288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
425388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
425488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcle(
425588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
42567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcle, kFpNeon);
4257b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcle) << ConditionPrinter(it_block_, cond) << dt;
4258c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
425988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4260c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
426188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4262c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
426388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
426488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
426588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcls(Condition cond,
426688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
426788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
426888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
42697f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcls, kFpNeon);
4270b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcls) << ConditionPrinter(it_block_, cond) << dt << " "
4271b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
427288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
427388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
427488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcls(Condition cond,
427588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
427688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
427788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
42787f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcls, kFpNeon);
4279b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcls) << ConditionPrinter(it_block_, cond) << dt << " "
4280b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
428188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
428288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
428388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vclt(Condition cond,
428488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
428588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
428688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
428788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
42887f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVclt, kFpNeon);
4289b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVclt) << ConditionPrinter(it_block_, cond) << dt;
4290c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
429188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4292c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
429388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4294c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
429588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
429688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
429788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vclt(Condition cond,
429888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
429988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
430088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
430188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
43027f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVclt, kFpNeon);
4303b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVclt) << ConditionPrinter(it_block_, cond) << dt;
4304c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
430588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
4306c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
430788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4308c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
430988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
431088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
431188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vclt(
431288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
43137f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVclt, kFpNeon);
4314b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVclt) << ConditionPrinter(it_block_, cond) << dt;
4315c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
431688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4317c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
431888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4319c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
432088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
432188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
432288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vclt(
432388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
43247f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVclt, kFpNeon);
4325b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVclt) << ConditionPrinter(it_block_, cond) << dt;
4326c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
432788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4328c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
432988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4330c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
433188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
433288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
433388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vclz(Condition cond,
433488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
433588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
433688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
43377f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVclz, kFpNeon);
4338b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVclz) << ConditionPrinter(it_block_, cond) << dt << " "
4339b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
434088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
434188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
434288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vclz(Condition cond,
434388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
434488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
434588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
43467f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVclz, kFpNeon);
4347b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVclz) << ConditionPrinter(it_block_, cond) << dt << " "
4348b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
434988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
435088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
435188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcmp(Condition cond,
435288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
435388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rd,
435488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rm) {
43557f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcmp, kFpNeon);
4356b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcmp) << ConditionPrinter(it_block_, cond) << dt << " "
4357b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
435888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
435988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
436088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcmp(Condition cond,
436188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
436288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
436388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
43647f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcmp, kFpNeon);
4365b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcmp) << ConditionPrinter(it_block_, cond) << dt << " "
4366b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
436788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
436888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
436988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcmp(Condition cond, DataType dt, SRegister rd, double imm) {
43707f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcmp, kFpNeon);
4371b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcmp) << ConditionPrinter(it_block_, cond) << dt << " "
4372b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", "
4373c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << std::fixed << std::setprecision(1) << imm
4374c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << std::resetiosflags(std::ios_base::floatfield);
437588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
437688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
437788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcmp(Condition cond, DataType dt, DRegister rd, double imm) {
43787f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcmp, kFpNeon);
4379b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcmp) << ConditionPrinter(it_block_, cond) << dt << " "
4380b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", "
4381c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << std::fixed << std::setprecision(1) << imm
4382c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << std::resetiosflags(std::ios_base::floatfield);
438388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
438488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
438588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcmpe(Condition cond,
438688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
438788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
438888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rm) {
43897f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcmpe, kFpNeon);
4390b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcmpe) << ConditionPrinter(it_block_, cond) << dt << " "
4391b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
439288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
439388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
439488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcmpe(Condition cond,
439588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
439688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
439788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
43987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcmpe, kFpNeon);
4399b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcmpe) << ConditionPrinter(it_block_, cond) << dt << " "
4400b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
440188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
440288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
440388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcmpe(Condition cond,
440488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
440588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
440688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         double imm) {
44077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcmpe, kFpNeon);
4408b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcmpe) << ConditionPrinter(it_block_, cond) << dt << " "
4409b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", "
4410c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << std::fixed << std::setprecision(1) << imm
4411c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << std::resetiosflags(std::ios_base::floatfield);
441288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
441388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
441488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcmpe(Condition cond,
441588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
441688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
441788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         double imm) {
44187f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcmpe, kFpNeon);
4419b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcmpe) << ConditionPrinter(it_block_, cond) << dt << " "
4420b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", "
4421c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << std::fixed << std::setprecision(1) << imm
4422c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << std::resetiosflags(std::ios_base::floatfield);
442388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
442488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
442588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcnt(Condition cond,
442688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
442788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
442888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
44297f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcnt, kFpNeon);
4430b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcnt) << ConditionPrinter(it_block_, cond) << dt << " "
4431b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
443288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
443388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
443488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcnt(Condition cond,
443588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
443688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
443788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
44387f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcnt, kFpNeon);
4439b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcnt) << ConditionPrinter(it_block_, cond) << dt << " "
4440b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
444188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
444288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
444388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(
444488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
44457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4446b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4447b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
444888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
444988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
445088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(
445188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
44527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4453b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4454b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
445588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
445688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
445788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(Condition cond,
445888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt1,
445988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt2,
446088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
446188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
446288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t fbits) {
44637f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4464b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4465b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm << ", "
4466c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << fbits;
446788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
446888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
446988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(Condition cond,
447088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt1,
447188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt2,
447288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
447388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
447488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t fbits) {
44757f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4476b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4477b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm << ", "
4478c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << fbits;
447988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
448088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
448188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(Condition cond,
448288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt1,
448388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt2,
448488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rd,
448588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rm,
448688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t fbits) {
44877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4488b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4489b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm << ", "
4490c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois       << "#" << fbits;
449188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
449288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
449388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(
449488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
44957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4496b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4497b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
449888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
449988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
450088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(
450188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
45027f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4503b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4504b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
450588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
450688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
450788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(
450888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm) {
45097f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4510b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4511b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
451288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
451388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
451488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(
451588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm) {
45167f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4517b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4518b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
451988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
452088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
452188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvt(
452288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
45237f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvt, kFpNeon);
4524b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4525b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
452688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
452788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
452888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvta(DataType dt1,
452988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
453088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
453188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
45327f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvta, kFpNeon);
4533b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvta) << dt1 << dt2 << " " << rd << ", " << rm;
453488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
453588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
453688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvta(DataType dt1,
453788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
453888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
453988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm) {
45407f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvta, kFpNeon);
4541b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvta) << dt1 << dt2 << " " << rd << ", " << rm;
454288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
454388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
454488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvta(DataType dt1,
454588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
454688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
454788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rm) {
45487f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvta, kFpNeon);
4549b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvta) << dt1 << dt2 << " " << rd << ", " << rm;
455088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
455188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
455288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvta(DataType dt1,
455388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
455488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
455588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
45567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvta, kFpNeon);
4557b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvta) << dt1 << dt2 << " " << rd << ", " << rm;
455888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
455988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
456088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtb(
456188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
45627f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtb, kFpNeon);
4563b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtb) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4564b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
456588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
456688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
456788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtb(
456888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
45697f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtb, kFpNeon);
4570b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtb) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4571b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
457288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
457388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
457488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtb(
457588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
45767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtb, kFpNeon);
4577b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtb) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4578b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
457988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
458088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
458188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtm(DataType dt1,
458288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
458388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
458488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
45857f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtm, kFpNeon);
4586b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtm) << dt1 << dt2 << " " << rd << ", " << rm;
458788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
458888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
458988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtm(DataType dt1,
459088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
459188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
459288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm) {
45937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtm, kFpNeon);
4594b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtm) << dt1 << dt2 << " " << rd << ", " << rm;
459588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
459688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
459788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtm(DataType dt1,
459888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
459988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
460088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rm) {
46017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtm, kFpNeon);
4602b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtm) << dt1 << dt2 << " " << rd << ", " << rm;
460388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
460488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
460588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtm(DataType dt1,
460688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
460788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
460888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
46097f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtm, kFpNeon);
4610b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtm) << dt1 << dt2 << " " << rd << ", " << rm;
461188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
461288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
461388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtn(DataType dt1,
461488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
461588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
461688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
46177f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtn, kFpNeon);
4618b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtn) << dt1 << dt2 << " " << rd << ", " << rm;
461988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
462088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
462188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtn(DataType dt1,
462288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
462388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
462488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm) {
46257f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtn, kFpNeon);
4626b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtn) << dt1 << dt2 << " " << rd << ", " << rm;
462788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
462888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
462988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtn(DataType dt1,
463088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
463188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
463288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rm) {
46337f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtn, kFpNeon);
4634b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtn) << dt1 << dt2 << " " << rd << ", " << rm;
463588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
463688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
463788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtn(DataType dt1,
463888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
463988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
464088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
46417f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtn, kFpNeon);
4642b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtn) << dt1 << dt2 << " " << rd << ", " << rm;
464388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
464488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
464588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtp(DataType dt1,
464688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
464788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
464888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
46497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtp, kFpNeon);
4650b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtp) << dt1 << dt2 << " " << rd << ", " << rm;
465188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
465288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
465388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtp(DataType dt1,
465488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
465588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
465688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm) {
46577f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtp, kFpNeon);
4658b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtp) << dt1 << dt2 << " " << rd << ", " << rm;
465988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
466088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
466188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtp(DataType dt1,
466288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
466388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
466488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rm) {
46657f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtp, kFpNeon);
4666b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtp) << dt1 << dt2 << " " << rd << ", " << rm;
466788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
466888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
466988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtp(DataType dt1,
467088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt2,
467188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
467288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
46737f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtp, kFpNeon);
4674b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtp) << dt1 << dt2 << " " << rd << ", " << rm;
467588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
467688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
467788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtr(
467888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
46797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtr, kFpNeon);
4680b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtr) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4681b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
468288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
468388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
468488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtr(
468588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
46867f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtr, kFpNeon);
4687b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtr) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4688b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
468988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
469088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
469188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtt(
469288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
46937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtt, kFpNeon);
4694b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4695b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
469688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
469788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
469888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtt(
469988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
47007f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtt, kFpNeon);
4701b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4702b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
470388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
470488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
470588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vcvtt(
470688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
47077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVcvtt, kFpNeon);
4708b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVcvtt) << ConditionPrinter(it_block_, cond) << dt1 << dt2
4709b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
471088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
471188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
471288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vdiv(
471388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
47147f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVdiv, kFpNeon);
4715b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVdiv) << ConditionPrinter(it_block_, cond) << dt;
4716c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
471788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4718c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
471988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4720c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
472188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
472288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
472388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vdiv(
472488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
47257f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVdiv, kFpNeon);
4726b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVdiv) << ConditionPrinter(it_block_, cond) << dt;
4727c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
472888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4729c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
473088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4731c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
473288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
473388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
473488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vdup(Condition cond,
473588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
473688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
473788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt) {
47387f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVdup, kFpNeon);
4739b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVdup) << ConditionPrinter(it_block_, cond) << dt << " "
4740b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rt;
474188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
474288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
474388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vdup(Condition cond,
474488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
474588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
474688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt) {
47477f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVdup, kFpNeon);
4748b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVdup) << ConditionPrinter(it_block_, cond) << dt << " "
4749b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rt;
475088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
475188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
475288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vdup(Condition cond,
475388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
475488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
475588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegisterLane rm) {
47567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVdup, kFpNeon);
4757b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVdup) << ConditionPrinter(it_block_, cond) << dt << " "
4758b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
475988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
476088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
476188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vdup(Condition cond,
476288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
476388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
476488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegisterLane rm) {
47657f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVdup, kFpNeon);
4766b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVdup) << ConditionPrinter(it_block_, cond) << dt << " "
4767b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
476888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
476988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
477088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::veor(
477188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
47727f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVeor, kFpNeon);
4773b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVeor) << ConditionPrinter(it_block_, cond) << dt;
4774c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
477588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4776c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
477788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4778c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
477988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
478088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
478188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::veor(
478288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
47837f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVeor, kFpNeon);
4784b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVeor) << ConditionPrinter(it_block_, cond) << dt;
4785c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
478688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4787c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
478888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4789c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
479088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
479188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
479288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vext(Condition cond,
479388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
479488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
479588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rn,
479688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
479788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
47987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVext, kFpNeon);
4799b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVext) << ConditionPrinter(it_block_, cond) << dt;
4800c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
480188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4802c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
480388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4804c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm << ", " << operand;
480588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
480688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
480788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vext(Condition cond,
480888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
480988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
481088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rn,
481188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
481288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
48137f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVext, kFpNeon);
4814b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVext) << ConditionPrinter(it_block_, cond) << dt;
4815c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
481688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4817c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
481888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4819c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm << ", " << operand;
482088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
482188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
482288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfma(
482388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
48247f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfma, kFpNeon);
4825b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfma) << ConditionPrinter(it_block_, cond) << dt << " "
4826b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
482788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
482888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
482988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfma(
483088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
48317f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfma, kFpNeon);
4832b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfma) << ConditionPrinter(it_block_, cond) << dt << " "
4833b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
483488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
483588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
483688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfma(
483788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
48387f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfma, kFpNeon);
4839b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfma) << ConditionPrinter(it_block_, cond) << dt << " "
4840b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
484188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
484288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
484388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfms(
484488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
48457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfms, kFpNeon);
4846b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfms) << ConditionPrinter(it_block_, cond) << dt << " "
4847b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
484888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
484988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
485088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfms(
485188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
48527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfms, kFpNeon);
4853b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfms) << ConditionPrinter(it_block_, cond) << dt << " "
4854b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
485588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
485688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
485788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfms(
485888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
48597f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfms, kFpNeon);
4860b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfms) << ConditionPrinter(it_block_, cond) << dt << " "
4861b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
486288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
486388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
486488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfnma(
486588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
48667f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfnma, kFpNeon);
4867b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfnma) << ConditionPrinter(it_block_, cond) << dt << " "
4868b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
486988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
487088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
487188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfnma(
487288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
48737f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfnma, kFpNeon);
4874b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfnma) << ConditionPrinter(it_block_, cond) << dt << " "
4875b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
487688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
487788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
487888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfnms(
487988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
48807f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfnms, kFpNeon);
4881b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfnms) << ConditionPrinter(it_block_, cond) << dt << " "
4882b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
488388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
488488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
488588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vfnms(
488688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
48877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVfnms, kFpNeon);
4888b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVfnms) << ConditionPrinter(it_block_, cond) << dt << " "
4889b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
489088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
489188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
489288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vhadd(
489388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
48947f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVhadd, kFpNeon);
4895b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVhadd) << ConditionPrinter(it_block_, cond) << dt;
4896c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
489788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4898c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
489988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4900c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
490188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
490288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
490388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vhadd(
490488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
49057f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVhadd, kFpNeon);
4906b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVhadd) << ConditionPrinter(it_block_, cond) << dt;
4907c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
490888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4909c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
491088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4911c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
491288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
491388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
491488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vhsub(
491588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
49167f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVhsub, kFpNeon);
4917b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVhsub) << ConditionPrinter(it_block_, cond) << dt;
4918c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
491988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4920c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
492188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4922c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
492388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
492488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
492588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vhsub(
492688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
49277f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVhsub, kFpNeon);
4928b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVhsub) << ConditionPrinter(it_block_, cond) << dt;
4929c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
493088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
4931c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
493288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
4933c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
493488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
493588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
493688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vld1(Condition cond,
493788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
493888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
493988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const AlignedMemOperand& operand) {
49407f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVld1, kFpNeon);
4941b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVld1) << ConditionPrinter(it_block_, cond) << dt << " "
4942b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintAlignedMemOperand(kVld1Location, operand);
494388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
494488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
494588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vld2(Condition cond,
494688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
494788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
494888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const AlignedMemOperand& operand) {
49497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVld2, kFpNeon);
4950b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVld2) << ConditionPrinter(it_block_, cond) << dt << " "
4951b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintAlignedMemOperand(kVld2Location, operand);
495288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
495388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
495488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vld3(Condition cond,
495588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
495688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
495788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const AlignedMemOperand& operand) {
49587f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVld3, kFpNeon);
4959b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVld3) << ConditionPrinter(it_block_, cond) << dt << " "
4960b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintAlignedMemOperand(kVld3Location, operand);
496188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
496288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
496388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vld3(Condition cond,
496488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
496588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
496688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
49677f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVld3, kFpNeon);
4968b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVld3) << ConditionPrinter(it_block_, cond) << dt << " "
4969b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintMemOperand(kVld3Location, operand);
497088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
497188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
497288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vld4(Condition cond,
497388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
497488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
497588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const AlignedMemOperand& operand) {
49767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVld4, kFpNeon);
4977b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVld4) << ConditionPrinter(it_block_, cond) << dt << " "
4978b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintAlignedMemOperand(kVld4Location, operand);
497988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
498088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
498188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldm(Condition cond,
498288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
498388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
498488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        WriteBack write_back,
498588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegisterList dreglist) {
49867f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldm, kLoadStore | kLoadStoreMultiple | kFpNeon);
4987b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldm) << ConditionPrinter(it_block_, cond) << dt << " "
4988b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << dreglist;
498988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
499088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
499188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldm(Condition cond,
499288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
499388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
499488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        WriteBack write_back,
499588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegisterList sreglist) {
49967f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldm, kLoadStore | kLoadStoreMultiple | kFpNeon);
4997b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldm) << ConditionPrinter(it_block_, cond) << dt << " "
4998b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << sreglist;
499988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
500088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
500188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldmdb(Condition cond,
500288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
500388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
500488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back,
500588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegisterList dreglist) {
50067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldmdb,
50077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
5008b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldmdb) << ConditionPrinter(it_block_, cond) << dt << " "
5009b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << dreglist;
501088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
501188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
501288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldmdb(Condition cond,
501388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
501488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
501588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back,
501688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegisterList sreglist) {
50177f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldmdb,
50187f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
5019b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldmdb) << ConditionPrinter(it_block_, cond) << dt << " "
5020b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << sreglist;
502188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
502288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
502388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldmia(Condition cond,
502488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
502588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
502688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back,
502788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegisterList dreglist) {
50287f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldmia,
50297f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
5030b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldmia) << ConditionPrinter(it_block_, cond) << dt << " "
5031b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << dreglist;
503288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
503388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
503488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldmia(Condition cond,
503588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
503688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
503788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back,
503888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegisterList sreglist) {
50397f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldmia,
50407f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
5041b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldmia) << ConditionPrinter(it_block_, cond) << dt << " "
5042b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << sreglist;
504388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
504488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
504588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldr(Condition cond,
504688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
504788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
504888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Label* label) {
50497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldr, kFpNeon);
5050b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldr) << ConditionPrinter(it_block_, cond) << dt << " "
5051b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << PrintLabel(kLoadDoublePrecisionLocation,
5052b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois                                   label,
5053b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois                                   GetCodeAddress() & ~3);
505488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
505588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
505688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldr(Condition cond,
505788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
505888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
505988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
50607f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldr, kFpNeon);
5061b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldr) << ConditionPrinter(it_block_, cond) << dt << " "
5062b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << PrintMemOperand(kLoadDoublePrecisionLocation, operand);
506388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
506488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
506588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldr(Condition cond,
506688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
506788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rd,
506888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Label* label) {
50697f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldr, kFpNeon);
5070b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldr) << ConditionPrinter(it_block_, cond) << dt << " "
5071b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << PrintLabel(kLoadSinglePrecisionLocation,
5072b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois                                   label,
5073b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois                                   GetCodeAddress() & ~3);
507488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
507588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
507688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vldr(Condition cond,
507788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
507888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rd,
507988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
50807f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVldr, kFpNeon);
5081b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVldr) << ConditionPrinter(it_block_, cond) << dt << " "
5082b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << PrintMemOperand(kLoadSinglePrecisionLocation, operand);
508388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
508488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
508588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmax(
508688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
50877f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmax, kFpNeon);
5088b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmax) << ConditionPrinter(it_block_, cond) << dt;
5089c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
509088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5091c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
509288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5093c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
509488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
509588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
509688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmax(
509788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
50987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmax, kFpNeon);
5099b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmax) << ConditionPrinter(it_block_, cond) << dt;
5100c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
510188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5102c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
510388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5104c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
510588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
510688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
510788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmaxnm(DataType dt,
510888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
510988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rn,
511088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
51117f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmaxnm, kFpNeon);
5112b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmaxnm) << dt << " " << rd << ", " << rn << ", " << rm;
511388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
511488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
511588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmaxnm(DataType dt,
511688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
511788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rn,
511888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
51197f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmaxnm, kFpNeon);
5120b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmaxnm) << dt << " " << rd << ", " << rn << ", " << rm;
512188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
512288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
512388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmaxnm(DataType dt,
512488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
512588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rn,
512688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
51277f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmaxnm, kFpNeon);
5128b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmaxnm) << dt << " " << rd << ", " << rn << ", " << rm;
512988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
513088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
513188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmin(
513288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
51337f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmin, kFpNeon);
5134b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmin) << ConditionPrinter(it_block_, cond) << dt;
5135c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
513688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5137c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
513888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5139c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
514088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
514188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
514288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmin(
514388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
51447f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmin, kFpNeon);
5145b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmin) << ConditionPrinter(it_block_, cond) << dt;
5146c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
514788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5148c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
514988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5150c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
515188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
515288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
515388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vminnm(DataType dt,
515488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
515588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rn,
515688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
51577f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVminnm, kFpNeon);
5158b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVminnm) << dt << " " << rd << ", " << rn << ", " << rm;
515988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
516088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
516188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vminnm(DataType dt,
516288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
516388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rn,
516488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
51657f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVminnm, kFpNeon);
5166b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVminnm) << dt << " " << rd << ", " << rn << ", " << rm;
516788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
516888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
516988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vminnm(DataType dt,
517088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
517188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rn,
517288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
51737f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVminnm, kFpNeon);
5174b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVminnm) << dt << " " << rd << ", " << rn << ", " << rm;
517588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
517688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
517788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmla(
517888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
51797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmla, kFpNeon);
5180b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmla) << ConditionPrinter(it_block_, cond) << dt << " "
5181b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
518288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
518388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
518488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmla(
518588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
51867f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmla, kFpNeon);
5187b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmla) << ConditionPrinter(it_block_, cond) << dt << " "
5188b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
518988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
519088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
519188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmla(
519288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
51937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmla, kFpNeon);
5194b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmla) << ConditionPrinter(it_block_, cond) << dt << " "
5195b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
519688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
519788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
519888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmla(
519988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
52007f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmla, kFpNeon);
5201b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmla) << ConditionPrinter(it_block_, cond) << dt << " "
5202b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
520388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
520488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
520588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmla(
520688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
52077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmla, kFpNeon);
5208b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmla) << ConditionPrinter(it_block_, cond) << dt << " "
5209b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
521088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
521188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
521288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmlal(
521388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
52147f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmlal, kFpNeon);
5215b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmlal) << ConditionPrinter(it_block_, cond) << dt << " "
5216b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
521788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
521888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
521988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmlal(
522088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
52217f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmlal, kFpNeon);
5222b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmlal) << ConditionPrinter(it_block_, cond) << dt << " "
5223b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
522488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
522588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
522688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmls(
522788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
52287f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmls, kFpNeon);
5229b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmls) << ConditionPrinter(it_block_, cond) << dt << " "
5230b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
523188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
523288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
523388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmls(
523488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
52357f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmls, kFpNeon);
5236b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmls) << ConditionPrinter(it_block_, cond) << dt << " "
5237b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
523888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
523988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
524088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmls(
524188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
52427f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmls, kFpNeon);
5243b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmls) << ConditionPrinter(it_block_, cond) << dt << " "
5244b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
524588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
524688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
524788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmls(
524888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
52497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmls, kFpNeon);
5250b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmls) << ConditionPrinter(it_block_, cond) << dt << " "
5251b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
525288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
525388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
525488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmls(
525588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
52567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmls, kFpNeon);
5257b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmls) << ConditionPrinter(it_block_, cond) << dt << " "
5258b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
525988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
526088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
526188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmlsl(
526288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
52637f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmlsl, kFpNeon);
5264b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmlsl) << ConditionPrinter(it_block_, cond) << dt << " "
5265b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
526688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
526788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
526888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmlsl(
526988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
52707f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmlsl, kFpNeon);
5271b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmlsl) << ConditionPrinter(it_block_, cond) << dt << " "
5272b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
527388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
527488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
527588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond, Register rt, SRegister rn) {
52767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5277b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << " " << rt
5278b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rn;
527988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
528088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
528188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond, SRegister rn, Register rt) {
52827f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5283b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << " " << rn
5284b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt;
528588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
528688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
528788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond,
528888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
528988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt2,
529088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
52917f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5292b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << " " << rt
5293b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt2 << ", " << rm;
529488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
529588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
529688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond,
529788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
529888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
529988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt2) {
53007f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5301b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << " " << rm
5302b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt << ", " << rt2;
530388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
530488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
530588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(
530688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, Register rt, Register rt2, SRegister rm, SRegister rm1) {
53077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5308b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << " " << rt
5309b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rt2 << ", " << rm << ", " << rm1;
531088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
531188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
531288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(
531388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, SRegister rm, SRegister rm1, Register rt, Register rt2) {
53147f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5315b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << " " << rm
5316b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << rm1 << ", " << rt << ", " << rt2;
531788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
531888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
531988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond,
532088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
532188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegisterLane rd,
532288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt) {
53237f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5324b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << dt << " "
5325b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rt;
532688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
532788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
532888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond,
532988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
533088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
533188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
53327f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5333b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << dt << " "
5334b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
533588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
533688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
533788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond,
533888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
533988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
534088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
53417f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5342b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << dt << " "
5343b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
534488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
534588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
534688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond,
534788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
534888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rd,
534988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const SOperand& operand) {
53507f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5351b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << dt << " "
5352b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
535388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
535488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
535588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmov(Condition cond,
535688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
535788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt,
535888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegisterLane rn) {
53597f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmov, kFpNeon);
5360b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmov) << ConditionPrinter(it_block_, cond) << dt << " "
5361b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rt << ", " << rn;
536288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
536388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
536488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmovl(Condition cond,
536588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
536688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
536788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
53687f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmovl, kFpNeon);
5369b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmovl) << ConditionPrinter(it_block_, cond) << dt << " "
5370b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
537188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
537288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
537388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmovn(Condition cond,
537488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
537588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
537688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm) {
53777f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmovn, kFpNeon);
5378b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmovn) << ConditionPrinter(it_block_, cond) << dt << " "
5379b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
538088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
538188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
538288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmrs(Condition cond,
538388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        RegisterOrAPSR_nzcv rt,
538488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpecialFPRegister spec_reg) {
53857f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmrs, kFpNeon);
5386b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmrs) << ConditionPrinter(it_block_, cond) << " " << rt
5387b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << ", " << spec_reg;
538888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
538988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
539088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmsr(Condition cond,
539188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpecialFPRegister spec_reg,
539288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rt) {
53937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmsr, kFpNeon);
5394b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmsr) << ConditionPrinter(it_block_, cond) << " "
5395b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << spec_reg << ", " << rt;
539688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
539788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
539888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmul(Condition cond,
539988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
540088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
540188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rn,
540288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister dm,
540388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned index) {
54047f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmul, kFpNeon);
5405b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmul) << ConditionPrinter(it_block_, cond) << dt;
5406c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
540788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5408c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
540988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5410c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << dm << "[" << index << "]";
541188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
541288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
541388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmul(Condition cond,
541488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
541588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
541688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rn,
541788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister dm,
541888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned index) {
54197f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmul, kFpNeon);
5420b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmul) << ConditionPrinter(it_block_, cond) << dt;
5421c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
542288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5423c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
542488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5425c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << dm << "[" << index << "]";
542688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
542788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
542888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmul(
542988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
54307f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmul, kFpNeon);
5431b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmul) << ConditionPrinter(it_block_, cond) << dt;
5432c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
543388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5434c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
543588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5436c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
543788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
543888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
543988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmul(
544088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
54417f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmul, kFpNeon);
5442b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmul) << ConditionPrinter(it_block_, cond) << dt;
5443c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
544488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5445c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
544688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5447c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
544888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
544988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
545088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmul(
545188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
54527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmul, kFpNeon);
5453b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmul) << ConditionPrinter(it_block_, cond) << dt;
5454c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
545588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5456c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
545788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5458c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
545988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
546088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
546188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmull(Condition cond,
546288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
546388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
546488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rn,
546588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister dm,
546688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         unsigned index) {
54677f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmull, kFpNeon);
5468b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmull) << ConditionPrinter(it_block_, cond) << dt << " "
5469b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << dm << "[" << index << "]";
547088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
547188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
547288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmull(
547388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
54747f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmull, kFpNeon);
5475b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmull) << ConditionPrinter(it_block_, cond) << dt << " "
5476b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
547788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
547888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
547988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmvn(Condition cond,
548088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
548188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
548288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
54837f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmvn, kFpNeon);
5484b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmvn) << ConditionPrinter(it_block_, cond) << dt << " "
5485b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
548688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
548788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
548888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vmvn(Condition cond,
548988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
549088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
549188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
54927f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVmvn, kFpNeon);
5493b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVmvn) << ConditionPrinter(it_block_, cond) << dt << " "
5494b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << operand;
549588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
549688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
549788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vneg(Condition cond,
549888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
549988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
550088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
55017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVneg, kFpNeon);
5502b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVneg) << ConditionPrinter(it_block_, cond) << dt << " "
5503b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
550488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
550588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
550688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vneg(Condition cond,
550788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
550888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
550988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
55107f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVneg, kFpNeon);
5511b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVneg) << ConditionPrinter(it_block_, cond) << dt << " "
5512b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
551388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
551488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
551588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vneg(Condition cond,
551688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
551788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rd,
551888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rm) {
55197f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVneg, kFpNeon);
5520b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVneg) << ConditionPrinter(it_block_, cond) << dt << " "
5521b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
552288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
552388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
552488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vnmla(
552588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
55267f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVnmla, kFpNeon);
5527b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVnmla) << ConditionPrinter(it_block_, cond) << dt << " "
5528b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
552988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
553088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
553188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vnmla(
553288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
55337f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVnmla, kFpNeon);
5534b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVnmla) << ConditionPrinter(it_block_, cond) << dt << " "
5535b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
553688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
553788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
553888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vnmls(
553988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
55407f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVnmls, kFpNeon);
5541b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVnmls) << ConditionPrinter(it_block_, cond) << dt << " "
5542b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
554388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
554488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
554588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vnmls(
554688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
55477f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVnmls, kFpNeon);
5548b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVnmls) << ConditionPrinter(it_block_, cond) << dt << " "
5549b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
555088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
555188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
555288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vnmul(
555388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
55547f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVnmul, kFpNeon);
5555b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVnmul) << ConditionPrinter(it_block_, cond) << dt;
5556c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
555788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5558c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
555988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5560c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
556188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
556288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
556388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vnmul(
556488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
55657f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVnmul, kFpNeon);
5566b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVnmul) << ConditionPrinter(it_block_, cond) << dt;
5567c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
556888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5569c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
557088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5571c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
557288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
557388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
557488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vorn(Condition cond,
557588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
557688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
557788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rn,
557888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
55797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVorn, kFpNeon);
5580b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVorn) << ConditionPrinter(it_block_, cond) << dt;
5581c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
558288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5583c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
558488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5585c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
558688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
558788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
558888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vorn(Condition cond,
558988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
559088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
559188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rn,
559288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
55937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVorn, kFpNeon);
5594b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVorn) << ConditionPrinter(it_block_, cond) << dt;
5595c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
559688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5597c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
559888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5599c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
560088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
560188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
560288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vorr(Condition cond,
560388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
560488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
560588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rn,
560688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
56077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVorr, kFpNeon);
5608b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVorr) << ConditionPrinter(it_block_, cond) << dt;
5609c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
561088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5611c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
561288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5613c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
561488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
561588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
561688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vorr(Condition cond,
561788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
561888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
561988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rn,
562088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
56217f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVorr, kFpNeon);
5622b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVorr) << ConditionPrinter(it_block_, cond) << dt;
5623c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
562488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5625c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
562688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5627c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << operand;
562888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
562988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
563088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpadal(Condition cond,
563188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
563288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
563388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
56347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpadal, kFpNeon);
5635b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpadal) << ConditionPrinter(it_block_, cond) << dt << " "
5636b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
563788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
563888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
563988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpadal(Condition cond,
564088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
564188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
564288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
56437f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpadal, kFpNeon);
5644b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpadal) << ConditionPrinter(it_block_, cond) << dt << " "
5645b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
564688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
564788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
564888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpadd(
564988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
56507f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpadd, kFpNeon);
5651b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpadd) << ConditionPrinter(it_block_, cond) << dt;
5652c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
565388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5654c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
565588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5656c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
565788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
565888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
565988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpaddl(Condition cond,
566088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
566188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
566288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
56637f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpaddl, kFpNeon);
5664b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpaddl) << ConditionPrinter(it_block_, cond) << dt << " "
5665b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
566688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
566788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
566888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpaddl(Condition cond,
566988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
567088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
567188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
56727f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpaddl, kFpNeon);
5673b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpaddl) << ConditionPrinter(it_block_, cond) << dt << " "
5674b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
567588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
567688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
567788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpmax(
567888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
56797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpmax, kFpNeon);
5680b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpmax) << ConditionPrinter(it_block_, cond) << dt;
5681c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
568288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5683c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
568488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5685c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
568688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
568788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
568888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpmin(
568988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
56907f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpmin, kFpNeon);
5691b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpmin) << ConditionPrinter(it_block_, cond) << dt;
5692c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
569388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5694c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
569588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5696c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
569788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
569888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
569988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpop(Condition cond, DataType dt, DRegisterList dreglist) {
57007f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpop, kLoadStore | kLoadStoreMultiple | kFpNeon);
5701b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpop) << ConditionPrinter(it_block_, cond) << dt << " "
5702b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << dreglist;
570388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
570488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
570588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpop(Condition cond, DataType dt, SRegisterList sreglist) {
57067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpop, kLoadStore | kLoadStoreMultiple | kFpNeon);
5707b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpop) << ConditionPrinter(it_block_, cond) << dt << " "
5708b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << sreglist;
570988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
571088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
571188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpush(Condition cond, DataType dt, DRegisterList dreglist) {
57127f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpush, kLoadStore | kLoadStoreMultiple | kFpNeon);
5713b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpush) << ConditionPrinter(it_block_, cond) << dt << " "
5714b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << dreglist;
571588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
571688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
571788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vpush(Condition cond, DataType dt, SRegisterList sreglist) {
57187f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVpush, kLoadStore | kLoadStoreMultiple | kFpNeon);
5719b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVpush) << ConditionPrinter(it_block_, cond) << dt << " "
5720b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << sreglist;
572188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
572288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
572388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqabs(Condition cond,
572488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
572588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
572688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
57277f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqabs, kFpNeon);
5728b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqabs) << ConditionPrinter(it_block_, cond) << dt << " "
5729b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
573088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
573188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
573288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqabs(Condition cond,
573388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
573488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
573588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm) {
57367f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqabs, kFpNeon);
5737b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqabs) << ConditionPrinter(it_block_, cond) << dt << " "
5738b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
573988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
574088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
574188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqadd(
574288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
57437f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqadd, kFpNeon);
5744b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqadd) << ConditionPrinter(it_block_, cond) << dt;
5745c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
574688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5747c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
574888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5749c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
575088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
575188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
575288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqadd(
575388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
57547f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqadd, kFpNeon);
5755b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqadd) << ConditionPrinter(it_block_, cond) << dt;
5756c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
575788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5758c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
575988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5760c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
576188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
576288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
576388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmlal(
576488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
57657f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmlal, kFpNeon);
5766b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmlal) << ConditionPrinter(it_block_, cond) << dt << " "
5767b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
576888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
576988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
577088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmlal(Condition cond,
577188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DataType dt,
577288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister rd,
577388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister rn,
577488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister dm,
577588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           unsigned index) {
57767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmlal, kFpNeon);
5777b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmlal) << ConditionPrinter(it_block_, cond) << dt << " "
5778b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << dm << "[" << index << "]";
577988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
578088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
578188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmlsl(
578288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
57837f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmlsl, kFpNeon);
5784b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmlsl) << ConditionPrinter(it_block_, cond) << dt << " "
5785b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
578688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
578788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
578888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmlsl(Condition cond,
578988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DataType dt,
579088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister rd,
579188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister rn,
579288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister dm,
579388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           unsigned index) {
57947f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmlsl, kFpNeon);
5795b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmlsl) << ConditionPrinter(it_block_, cond) << dt << " "
5796b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << dm << "[" << index << "]";
579788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
579888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
579988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmulh(
580088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
58017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmulh, kFpNeon);
5802b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmulh) << ConditionPrinter(it_block_, cond) << dt;
5803c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
580488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5805c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
580688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5807c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
580888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
580988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
581088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmulh(
581188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
58127f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmulh, kFpNeon);
5813b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmulh) << ConditionPrinter(it_block_, cond) << dt;
5814c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
581588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5816c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
581788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5818c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
581988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
582088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
582188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmulh(
582288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
58237f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmulh, kFpNeon);
5824b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmulh) << ConditionPrinter(it_block_, cond) << dt;
5825c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
582688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5827c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
582888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5829c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
583088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
583188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
583288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmulh(
583388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
58347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmulh, kFpNeon);
5835b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmulh) << ConditionPrinter(it_block_, cond) << dt;
5836c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
583788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5838c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
583988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5840c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
584188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
584288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
584388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmull(
584488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
58457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmull, kFpNeon);
5846b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmull) << ConditionPrinter(it_block_, cond) << dt << " "
5847b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
584888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
584988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
585088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqdmull(
585188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
58527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqdmull, kFpNeon);
5853b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqdmull) << ConditionPrinter(it_block_, cond) << dt << " "
5854b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
585588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
585688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
585788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqmovn(Condition cond,
585888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
585988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
586088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
58617f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqmovn, kFpNeon);
5862b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqmovn) << ConditionPrinter(it_block_, cond) << dt << " "
5863b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
586488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
586588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
586688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqmovun(Condition cond,
586788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DataType dt,
586888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister rd,
586988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister rm) {
58707f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqmovun, kFpNeon);
5871b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqmovun) << ConditionPrinter(it_block_, cond) << dt << " "
5872b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
587388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
587488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
587588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqneg(Condition cond,
587688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
587788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
587888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
58797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqneg, kFpNeon);
5880b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqneg) << ConditionPrinter(it_block_, cond) << dt << " "
5881b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
588288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
588388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
588488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqneg(Condition cond,
588588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
588688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
588788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm) {
58887f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqneg, kFpNeon);
5889b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqneg) << ConditionPrinter(it_block_, cond) << dt << " "
5890b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
589188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
589288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
589388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqrdmulh(
589488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
58957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqrdmulh, kFpNeon);
5896b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqrdmulh) << ConditionPrinter(it_block_, cond) << dt;
5897c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
589888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5899c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
590088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5901c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
590288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
590388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
590488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqrdmulh(
590588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
59067f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqrdmulh, kFpNeon);
5907b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqrdmulh) << ConditionPrinter(it_block_, cond) << dt;
5908c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
590988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5910c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
591188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5912c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
591388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
591488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
591588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqrdmulh(
591688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
59177f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqrdmulh, kFpNeon);
5918b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqrdmulh) << ConditionPrinter(it_block_, cond) << dt;
5919c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
592088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5921c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
592288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5923c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
592488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
592588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
592688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqrdmulh(
592788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
59287f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqrdmulh, kFpNeon);
5929b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqrdmulh) << ConditionPrinter(it_block_, cond) << dt;
5930c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
593188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
5932c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
593388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5934c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
593588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
593688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
593788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqrshl(
593888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn) {
59397f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqrshl, kFpNeon);
5940b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqrshl) << ConditionPrinter(it_block_, cond) << dt;
5941c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
594288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
5943c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
594488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5945c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << rn;
594688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
594788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
594888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqrshl(
594988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn) {
59507f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqrshl, kFpNeon);
5951b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqrshl) << ConditionPrinter(it_block_, cond) << dt;
5952c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
595388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
5954c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
595588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5956c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << rn;
595788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
595888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
595988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqrshrn(Condition cond,
596088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DataType dt,
596188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister rd,
596288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister rm,
596388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           const QOperand& operand) {
59647f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqrshrn, kFpNeon);
5965b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqrshrn) << ConditionPrinter(it_block_, cond) << dt << " "
5966b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm << ", " << operand;
596788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
596888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
596988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqrshrun(Condition cond,
597088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt,
597188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DRegister rd,
597288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            QRegister rm,
597388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            const QOperand& operand) {
59747f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqrshrun, kFpNeon);
5975b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqrshrun) << ConditionPrinter(it_block_, cond) << dt << " "
5976b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm << ", " << operand;
597788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
597888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
597988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqshl(Condition cond,
598088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
598188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
598288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm,
598388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const DOperand& operand) {
59847f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqshl, kFpNeon);
5985b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqshl) << ConditionPrinter(it_block_, cond) << dt;
5986c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
598788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
5988c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
598988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
5990c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
599188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
599288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
599388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqshl(Condition cond,
599488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
599588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
599688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm,
599788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const QOperand& operand) {
59987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqshl, kFpNeon);
5999b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqshl) << ConditionPrinter(it_block_, cond) << dt;
6000c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
600188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6002c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
600388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6004c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
600588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
600688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
600788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqshlu(Condition cond,
600888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
600988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
601088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm,
601188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const DOperand& operand) {
60127f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqshlu, kFpNeon);
6013b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqshlu) << ConditionPrinter(it_block_, cond) << dt;
6014c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
601588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6016c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
601788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6018c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
601988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
602088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
602188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqshlu(Condition cond,
602288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
602388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
602488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm,
602588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const QOperand& operand) {
60267f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqshlu, kFpNeon);
6027b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqshlu) << ConditionPrinter(it_block_, cond) << dt;
6028c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
602988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6030c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
603188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6032c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
603388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
603488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
603588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqshrn(Condition cond,
603688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
603788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
603888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm,
603988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const QOperand& operand) {
60407f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqshrn, kFpNeon);
6041b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqshrn) << ConditionPrinter(it_block_, cond) << dt << " "
6042b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm << ", " << operand;
604388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
604488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
604588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqshrun(Condition cond,
604688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DataType dt,
604788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister rd,
604888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister rm,
604988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           const QOperand& operand) {
60507f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqshrun, kFpNeon);
6051b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqshrun) << ConditionPrinter(it_block_, cond) << dt << " "
6052b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm << ", " << operand;
605388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
605488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
605588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqsub(
605688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
60577f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqsub, kFpNeon);
6058b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqsub) << ConditionPrinter(it_block_, cond) << dt;
6059c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
606088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6061c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
606288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6063c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
606488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
606588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
606688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vqsub(
606788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
60687f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVqsub, kFpNeon);
6069b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVqsub) << ConditionPrinter(it_block_, cond) << dt;
6070c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
607188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6072c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
607388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6074c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
607588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
607688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
607788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vraddhn(
607888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
60797f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVraddhn, kFpNeon);
6080b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVraddhn) << ConditionPrinter(it_block_, cond) << dt << " "
6081b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
608288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
608388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
608488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrecpe(Condition cond,
608588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
608688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
608788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
60887f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrecpe, kFpNeon);
6089b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrecpe) << ConditionPrinter(it_block_, cond) << dt << " "
6090b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
609188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
609288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
609388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrecpe(Condition cond,
609488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
609588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
609688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
60977f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrecpe, kFpNeon);
6098b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrecpe) << ConditionPrinter(it_block_, cond) << dt << " "
6099b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
610088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
610188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
610288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrecps(
610388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
61047f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrecps, kFpNeon);
6105b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrecps) << ConditionPrinter(it_block_, cond) << dt;
6106c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
610788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6108c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
610988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6110c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
611188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
611288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
611388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrecps(
611488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
61157f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrecps, kFpNeon);
6116b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrecps) << ConditionPrinter(it_block_, cond) << dt;
6117c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
611888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6119c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
612088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6121c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
612288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
612388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
612488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrev16(Condition cond,
612588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
612688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
612788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
61287f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrev16, kFpNeon);
6129b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrev16) << ConditionPrinter(it_block_, cond) << dt << " "
6130b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
613188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
613288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
613388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrev16(Condition cond,
613488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
613588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
613688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
61377f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrev16, kFpNeon);
6138b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrev16) << ConditionPrinter(it_block_, cond) << dt << " "
6139b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
614088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
614188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
614288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrev32(Condition cond,
614388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
614488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
614588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
61467f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrev32, kFpNeon);
6147b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrev32) << ConditionPrinter(it_block_, cond) << dt << " "
6148b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
614988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
615088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
615188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrev32(Condition cond,
615288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
615388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
615488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
61557f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrev32, kFpNeon);
6156b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrev32) << ConditionPrinter(it_block_, cond) << dt << " "
6157b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
615888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
615988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
616088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrev64(Condition cond,
616188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
616288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
616388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
61647f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrev64, kFpNeon);
6165b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrev64) << ConditionPrinter(it_block_, cond) << dt << " "
6166b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
616788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
616888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
616988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrev64(Condition cond,
617088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
617188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
617288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
61737f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrev64, kFpNeon);
6174b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrev64) << ConditionPrinter(it_block_, cond) << dt << " "
6175b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
617688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
617788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
617888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrhadd(
617988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
61807f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrhadd, kFpNeon);
6181b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrhadd) << ConditionPrinter(it_block_, cond) << dt;
6182c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
618388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6184c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
618588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6186c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
618788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
618888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
618988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrhadd(
619088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
61917f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrhadd, kFpNeon);
6192b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrhadd) << ConditionPrinter(it_block_, cond) << dt;
6193c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
619488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6195c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
619688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6197c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
619888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
619988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
620088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrinta(DataType dt1,
620188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
620288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
620388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
62047f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrinta, kFpNeon);
6205b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrinta) << dt1 << dt2 << " " << rd << ", " << rm;
620688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
620788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
620888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrinta(DataType dt1,
620988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
621088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
621188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
62127f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrinta, kFpNeon);
6213b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrinta) << dt1 << dt2 << " " << rd << ", " << rm;
621488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
621588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
621688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrinta(DataType dt1,
621788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
621888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
621988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
62207f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrinta, kFpNeon);
6221b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrinta) << dt1 << dt2 << " " << rd << ", " << rm;
622288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
622388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
622488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintm(DataType dt1,
622588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
622688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
622788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
62287f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintm, kFpNeon);
6229b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintm) << dt1 << dt2 << " " << rd << ", " << rm;
623088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
623188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
623288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintm(DataType dt1,
623388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
623488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
623588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
62367f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintm, kFpNeon);
6237b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintm) << dt1 << dt2 << " " << rd << ", " << rm;
623888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
623988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
624088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintm(DataType dt1,
624188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
624288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
624388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
62447f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintm, kFpNeon);
6245b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintm) << dt1 << dt2 << " " << rd << ", " << rm;
624688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
624788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
624888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintn(DataType dt1,
624988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
625088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
625188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
62527f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintn, kFpNeon);
6253b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintn) << dt1 << dt2 << " " << rd << ", " << rm;
625488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
625588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
625688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintn(DataType dt1,
625788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
625888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
625988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
62607f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintn, kFpNeon);
6261b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintn) << dt1 << dt2 << " " << rd << ", " << rm;
626288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
626388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
626488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintn(DataType dt1,
626588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
626688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
626788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
62687f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintn, kFpNeon);
6269b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintn) << dt1 << dt2 << " " << rd << ", " << rm;
627088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
627188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
627288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintp(DataType dt1,
627388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
627488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
627588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
62767f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintp, kFpNeon);
6277b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintp) << dt1 << dt2 << " " << rd << ", " << rm;
627888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
627988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
628088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintp(DataType dt1,
628188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
628288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
628388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
62847f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintp, kFpNeon);
6285b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintp) << dt1 << dt2 << " " << rd << ", " << rm;
628688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
628788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
628888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintp(DataType dt1,
628988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
629088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
629188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
62927f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintp, kFpNeon);
6293b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintp) << dt1 << dt2 << " " << rd << ", " << rm;
629488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
629588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
629688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintr(
629788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
62987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintr, kFpNeon);
6299b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintr) << ConditionPrinter(it_block_, cond) << dt1 << dt2
6300b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
630188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
630288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
630388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintr(
630488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
63057f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintr, kFpNeon);
6306b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintr) << ConditionPrinter(it_block_, cond) << dt1 << dt2
6307b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
630888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
630988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
631088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintx(
631188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
63127f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintx, kFpNeon);
6313b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintx) << ConditionPrinter(it_block_, cond) << dt1 << dt2
6314b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
631588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
631688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
631788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintx(DataType dt1,
631888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
631988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
632088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
63217f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintx, kFpNeon);
6322b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintx) << dt1 << dt2 << " " << rd << ", " << rm;
632388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
632488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
632588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintx(
632688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
63277f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintx, kFpNeon);
6328b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintx) << ConditionPrinter(it_block_, cond) << dt1 << dt2
6329b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
633088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
633188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
633288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintz(
633388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
63347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintz, kFpNeon);
6335b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintz) << ConditionPrinter(it_block_, cond) << dt1 << dt2
6336b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
633788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
633888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
633988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintz(DataType dt1,
634088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt2,
634188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rd,
634288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm) {
63437f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintz, kFpNeon);
6344b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintz) << dt1 << dt2 << " " << rd << ", " << rm;
634588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
634688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
634788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrintz(
634888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
63497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrintz, kFpNeon);
6350b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrintz) << ConditionPrinter(it_block_, cond) << dt1 << dt2
6351b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << " " << rd << ", " << rm;
635288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
635388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
635488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrshl(
635588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn) {
63567f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrshl, kFpNeon);
6357b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrshl) << ConditionPrinter(it_block_, cond) << dt;
6358c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
635988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6360c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
636188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6362c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << rn;
636388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
636488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
636588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrshl(
636688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn) {
63677f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrshl, kFpNeon);
6368b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrshl) << ConditionPrinter(it_block_, cond) << dt;
6369c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
637088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6371c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
637288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6373c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << rn;
637488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
637588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
637688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrshr(Condition cond,
637788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
637888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
637988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm,
638088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const DOperand& operand) {
63817f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrshr, kFpNeon);
6382b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrshr) << ConditionPrinter(it_block_, cond) << dt;
6383c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
638488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6385c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
638688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6387c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
638888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
638988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
639088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrshr(Condition cond,
639188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
639288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
639388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm,
639488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const QOperand& operand) {
63957f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrshr, kFpNeon);
6396b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrshr) << ConditionPrinter(it_block_, cond) << dt;
6397c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
639888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6399c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
640088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6401c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
640288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
640388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
640488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrshrn(Condition cond,
640588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
640688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
640788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          QRegister rm,
640888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          const QOperand& operand) {
64097f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrshrn, kFpNeon);
6410b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrshrn) << ConditionPrinter(it_block_, cond) << dt << " "
6411b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm << ", " << operand;
641288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
641388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
641488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrsqrte(Condition cond,
641588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DataType dt,
641688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister rd,
641788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister rm) {
64187f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrsqrte, kFpNeon);
6419b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrsqrte) << ConditionPrinter(it_block_, cond) << dt << " "
6420b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
642188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
642288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
642388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrsqrte(Condition cond,
642488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DataType dt,
642588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister rd,
642688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister rm) {
64277f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrsqrte, kFpNeon);
6428b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrsqrte) << ConditionPrinter(it_block_, cond) << dt << " "
6429b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
643088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
643188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
643288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrsqrts(
643388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
64347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrsqrts, kFpNeon);
6435b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrsqrts) << ConditionPrinter(it_block_, cond) << dt;
6436c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
643788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6438c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
643988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6440c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
644188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
644288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
644388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrsqrts(
644488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
64457f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrsqrts, kFpNeon);
6446b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrsqrts) << ConditionPrinter(it_block_, cond) << dt;
6447c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
644888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6449c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
645088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6451c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
645288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
645388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
645488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrsra(Condition cond,
645588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
645688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
645788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm,
645888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const DOperand& operand) {
64597f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrsra, kFpNeon);
6460b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrsra) << ConditionPrinter(it_block_, cond) << dt;
6461c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
646288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6463c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
646488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6465c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
646688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
646788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
646888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrsra(Condition cond,
646988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
647088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
647188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm,
647288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const QOperand& operand) {
64737f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrsra, kFpNeon);
6474b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrsra) << ConditionPrinter(it_block_, cond) << dt;
6475c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
647688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6477c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
647888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6479c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
648088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
648188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
648288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vrsubhn(
648388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
64847f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVrsubhn, kFpNeon);
6485b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVrsubhn) << ConditionPrinter(it_block_, cond) << dt << " "
6486b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
648788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
648888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
648988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vseleq(DataType dt,
649088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
649188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rn,
649288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
64937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVseleq, kFpNeon);
6494b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVseleq) << dt << " " << rd << ", " << rn << ", " << rm;
649588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
649688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
649788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vseleq(DataType dt,
649888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
649988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rn,
650088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
65017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVseleq, kFpNeon);
6502b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVseleq) << dt << " " << rd << ", " << rn << ", " << rm;
650388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
650488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
650588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vselge(DataType dt,
650688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
650788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rn,
650888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
65097f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVselge, kFpNeon);
6510b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVselge) << dt << " " << rd << ", " << rn << ", " << rm;
651188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
651288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
651388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vselge(DataType dt,
651488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
651588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rn,
651688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
65177f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVselge, kFpNeon);
6518b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVselge) << dt << " " << rd << ", " << rn << ", " << rm;
651988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
652088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
652188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vselgt(DataType dt,
652288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
652388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rn,
652488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
65257f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVselgt, kFpNeon);
6526b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVselgt) << dt << " " << rd << ", " << rn << ", " << rm;
652788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
652888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
652988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vselgt(DataType dt,
653088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
653188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rn,
653288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
65337f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVselgt, kFpNeon);
6534b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVselgt) << dt << " " << rd << ", " << rn << ", " << rm;
653588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
653688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
653788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vselvs(DataType dt,
653888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rd,
653988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rn,
654088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegister rm) {
65417f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVselvs, kFpNeon);
6542b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVselvs) << dt << " " << rd << ", " << rn << ", " << rm;
654388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
654488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
654588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vselvs(DataType dt,
654688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rd,
654788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rn,
654888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegister rm) {
65497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVselvs, kFpNeon);
6550b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVselvs) << dt << " " << rd << ", " << rn << ", " << rm;
655188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
655288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
655388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vshl(Condition cond,
655488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
655588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
655688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
655788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
65587f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVshl, kFpNeon);
6559b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVshl) << ConditionPrinter(it_block_, cond) << dt;
6560c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
656188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6562c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
656388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6564c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
656588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
656688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
656788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vshl(Condition cond,
656888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
656988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
657088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
657188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
65727f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVshl, kFpNeon);
6573b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVshl) << ConditionPrinter(it_block_, cond) << dt;
6574c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
657588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6576c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
657788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6578c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
657988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
658088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
658188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vshll(Condition cond,
658288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
658388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rd,
658488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm,
658588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const DOperand& operand) {
65867f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVshll, kFpNeon);
6587b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVshll) << ConditionPrinter(it_block_, cond) << dt << " "
6588b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm << ", " << operand;
658988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
659088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
659188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vshr(Condition cond,
659288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
659388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
659488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
659588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
65967f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVshr, kFpNeon);
6597b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVshr) << ConditionPrinter(it_block_, cond) << dt;
6598c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
659988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6600c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
660188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6602c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
660388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
660488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
660588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vshr(Condition cond,
660688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
660788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
660888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
660988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
66107f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVshr, kFpNeon);
6611b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVshr) << ConditionPrinter(it_block_, cond) << dt;
6612c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
661388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6614c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
661588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6616c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
661788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
661888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
661988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vshrn(Condition cond,
662088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
662188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
662288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister rm,
662388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         const QOperand& operand) {
66247f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVshrn, kFpNeon);
6625b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVshrn) << ConditionPrinter(it_block_, cond) << dt << " "
6626b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm << ", " << operand;
662788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
662888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
662988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsli(Condition cond,
663088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
663188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
663288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
663388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
66347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsli, kFpNeon);
6635b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsli) << ConditionPrinter(it_block_, cond) << dt;
6636c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
663788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6638c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
663988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6640c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
664188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
664288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
664388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsli(Condition cond,
664488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
664588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
664688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
664788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
66487f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsli, kFpNeon);
6649b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsli) << ConditionPrinter(it_block_, cond) << dt;
6650c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
665188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6652c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
665388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6654c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
665588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
665688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
665788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsqrt(Condition cond,
665888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
665988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rd,
666088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         SRegister rm) {
66617f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsqrt, kFpNeon);
6662b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsqrt) << ConditionPrinter(it_block_, cond) << dt << " "
6663b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
666488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
666588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
666688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsqrt(Condition cond,
666788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DataType dt,
666888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rd,
666988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister rm) {
66707f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsqrt, kFpNeon);
6671b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsqrt) << ConditionPrinter(it_block_, cond) << dt << " "
6672b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
667388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
667488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
667588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsra(Condition cond,
667688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
667788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
667888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
667988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
66807f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsra, kFpNeon);
6681b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsra) << ConditionPrinter(it_block_, cond) << dt;
6682c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
668388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6684c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
668588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6686c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
668788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
668888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
668988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsra(Condition cond,
669088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
669188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
669288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
669388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
66947f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsra, kFpNeon);
6695b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsra) << ConditionPrinter(it_block_, cond) << dt;
6696c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
669788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6698c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
669988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6700c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
670188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
670288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
670388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsri(Condition cond,
670488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
670588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
670688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm,
670788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const DOperand& operand) {
67087f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsri, kFpNeon);
6709b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsri) << ConditionPrinter(it_block_, cond) << dt;
6710c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
671188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6712c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
671388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6714c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
671588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
671688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
671788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsri(Condition cond,
671888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
671988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
672088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm,
672188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const QOperand& operand) {
67227f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsri, kFpNeon);
6723b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsri) << ConditionPrinter(it_block_, cond) << dt;
6724c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
672588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rm)) {
6726c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
672788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6728c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rm << ", " << operand;
672988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
673088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
673188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vst1(Condition cond,
673288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
673388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
673488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const AlignedMemOperand& operand) {
67357f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVst1, kFpNeon);
6736b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVst1) << ConditionPrinter(it_block_, cond) << dt << " "
6737b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintAlignedMemOperand(kVst1Location, operand);
673888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
673988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
674088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vst2(Condition cond,
674188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
674288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
674388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const AlignedMemOperand& operand) {
67447f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVst2, kFpNeon);
6745b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVst2) << ConditionPrinter(it_block_, cond) << dt << " "
6746b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintAlignedMemOperand(kVst2Location, operand);
674788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
674888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
674988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vst3(Condition cond,
675088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
675188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
675288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const AlignedMemOperand& operand) {
67537f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVst3, kFpNeon);
6754b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVst3) << ConditionPrinter(it_block_, cond) << dt << " "
6755b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintAlignedMemOperand(kVst3Location, operand);
675688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
675788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
675888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vst3(Condition cond,
675988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
676088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
676188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
67627f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVst3, kFpNeon);
6763b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVst3) << ConditionPrinter(it_block_, cond) << dt << " "
6764b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintMemOperand(kVst3Location, operand);
676588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
676688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
676788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vst4(Condition cond,
676888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
676988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
677088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const AlignedMemOperand& operand) {
67717f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVst4, kFpNeon);
6772b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVst4) << ConditionPrinter(it_block_, cond) << dt << " "
6773b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << nreglist << ", " << PrintAlignedMemOperand(kVst4Location, operand);
677488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
677588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
677688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vstm(Condition cond,
677788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
677888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
677988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        WriteBack write_back,
678088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegisterList dreglist) {
67817f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVstm, kLoadStore | kLoadStoreMultiple | kFpNeon);
6782b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVstm) << ConditionPrinter(it_block_, cond) << dt << " "
6783b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << dreglist;
678488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
678588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
678688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vstm(Condition cond,
678788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
678888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register rn,
678988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        WriteBack write_back,
679088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegisterList sreglist) {
67917f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVstm, kLoadStore | kLoadStoreMultiple | kFpNeon);
6792b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVstm) << ConditionPrinter(it_block_, cond) << dt << " "
6793b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << sreglist;
679488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
679588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
679688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vstmdb(Condition cond,
679788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
679888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
679988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back,
680088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegisterList dreglist) {
68017f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVstmdb,
68027f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
6803b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVstmdb) << ConditionPrinter(it_block_, cond) << dt << " "
6804b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << dreglist;
680588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
680688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
680788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vstmdb(Condition cond,
680888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
680988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
681088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back,
681188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegisterList sreglist) {
68127f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVstmdb,
68137f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
6814b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVstmdb) << ConditionPrinter(it_block_, cond) << dt << " "
6815b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << sreglist;
681688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
681788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
681888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vstmia(Condition cond,
681988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
682088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
682188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back,
682288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DRegisterList dreglist) {
68237f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVstmia,
68247f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
6825b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVstmia) << ConditionPrinter(it_block_, cond) << dt << " "
6826b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << dreglist;
682788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
682888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
682988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vstmia(Condition cond,
683088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt,
683188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register rn,
683288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back,
683388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SRegisterList sreglist) {
68347f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVstmia,
68357f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard                             kLoadStore | kLoadStoreMultiple | kFpNeon);
6836b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVstmia) << ConditionPrinter(it_block_, cond) << dt << " "
6837b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rn << write_back << ", " << sreglist;
683888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
683988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
684088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vstr(Condition cond,
684188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
684288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
684388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
68447f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVstr, kFpNeon);
6845b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVstr) << ConditionPrinter(it_block_, cond) << dt << " "
6846b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << PrintMemOperand(kStoreDoublePrecisionLocation, operand);
684788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
684888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
684988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vstr(Condition cond,
685088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
685188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SRegister rd,
685288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const MemOperand& operand) {
68537f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVstr, kFpNeon);
6854b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVstr) << ConditionPrinter(it_block_, cond) << dt << " "
6855b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << PrintMemOperand(kStoreSinglePrecisionLocation, operand);
685688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
685788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
685888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsub(
685988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
68607f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsub, kFpNeon);
6861b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsub) << ConditionPrinter(it_block_, cond) << dt;
6862c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
686388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6864c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
686588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6866c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
686788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
686888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
686988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsub(
687088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
68717f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsub, kFpNeon);
6872b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsub) << ConditionPrinter(it_block_, cond) << dt;
6873c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
687488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6875c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
687688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6877c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
687888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
687988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
688088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsub(
688188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
68827f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsub, kFpNeon);
6883b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsub) << ConditionPrinter(it_block_, cond) << dt;
6884c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
688588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6886c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
688788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6888c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
688988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
689088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
689188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsubhn(
689288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
68937f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsubhn, kFpNeon);
6894b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsubhn) << ConditionPrinter(it_block_, cond) << dt << " "
6895b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
689688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
689788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
689888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsubl(
689988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
69007f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsubl, kFpNeon);
6901b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsubl) << ConditionPrinter(it_block_, cond) << dt << " "
6902b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rn << ", " << rm;
690388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
690488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
690588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vsubw(
690688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm) {
69077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVsubw, kFpNeon);
6908b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVsubw) << ConditionPrinter(it_block_, cond) << dt;
6909c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
691088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6911c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
691288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6913c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
691488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
691588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
691688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vswp(Condition cond,
691788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
691888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
691988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
69207f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVswp, kFpNeon);
6921b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVswp) << ConditionPrinter(it_block_, cond) << dt << " "
6922b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
692388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
692488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
692588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vswp(Condition cond,
692688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
692788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
692888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
69297f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVswp, kFpNeon);
6930b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVswp) << ConditionPrinter(it_block_, cond) << dt << " "
6931b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
693288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
693388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
693488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vtbl(Condition cond,
693588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
693688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
693788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
693888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
69397f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVtbl, kFpNeon);
6940b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVtbl) << ConditionPrinter(it_block_, cond) << dt << " "
6941b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << nreglist << ", " << rm;
694288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
694388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
694488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vtbx(Condition cond,
694588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
694688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
694788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        const NeonRegisterList& nreglist,
694888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
69497f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVtbx, kFpNeon);
6950b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVtbx) << ConditionPrinter(it_block_, cond) << dt << " "
6951b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << nreglist << ", " << rm;
695288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
695388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
695488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vtrn(Condition cond,
695588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
695688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
695788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
69587f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVtrn, kFpNeon);
6959b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVtrn) << ConditionPrinter(it_block_, cond) << dt << " "
6960b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
696188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
696288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
696388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vtrn(Condition cond,
696488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
696588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
696688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
69677f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVtrn, kFpNeon);
6968b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVtrn) << ConditionPrinter(it_block_, cond) << dt << " "
6969b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
697088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
697188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
697288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vtst(
697388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
69747f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVtst, kFpNeon);
6975b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVtst) << ConditionPrinter(it_block_, cond) << dt;
6976c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
697788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6978c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
697988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6980c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
698188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
698288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
698388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vtst(
698488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
69857f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVtst, kFpNeon);
6986b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVtst) << ConditionPrinter(it_block_, cond) << dt;
6987c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << " ";
698888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (!rd.Is(rn)) {
6989c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    os() << rd << ", ";
699088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6991c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << rn << ", " << rm;
699288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
699388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
699488c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vuzp(Condition cond,
699588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
699688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
699788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
69987f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVuzp, kFpNeon);
6999b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVuzp) << ConditionPrinter(it_block_, cond) << dt << " "
7000b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
700188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
700288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
700388c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vuzp(Condition cond,
700488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
700588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
700688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
70077f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVuzp, kFpNeon);
7008b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVuzp) << ConditionPrinter(it_block_, cond) << dt << " "
7009b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
701088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
701188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
701288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vzip(Condition cond,
701388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
701488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rd,
701588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DRegister rm) {
70167f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVzip, kFpNeon);
7017b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVzip) << ConditionPrinter(it_block_, cond) << dt << " "
7018b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
701988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
702088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
702188c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::vzip(Condition cond,
702288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt,
702388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rd,
702488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        QRegister rm) {
70257f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kVzip, kFpNeon);
7026b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kVzip) << ConditionPrinter(it_block_, cond) << dt << " "
7027b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois       << rd << ", " << rm;
702888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
702988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
703088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::yield(Condition cond, EncodingSize size) {
70317f4a230cbb795755d24e1d4658e99a7ccf1eb24bVincent Belliard  os().SetCurrentInstruction(kYield, kNoAttribute);
7032b44f7a6ee7f9cd194cde9577f5a941f2864795a4Pierre Langlois  os() << ToCString(kYield) << ConditionPrinter(it_block_, cond) << size;
703388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
703488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
703588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisint Disassembler::T32Size(uint32_t instr) {
703688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((instr & 0xe0000000) == 0xe0000000) {
703788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (instr & 0x08000000) {
703888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x00000000:
703988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        if ((instr & 0x10000000) == 0x10000000) return 4;
704088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return 2;
704188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x08000000:
704288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return 4;
704388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      default:
704488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        return 2;
704588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
704688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
704788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  return 2;
704888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
704988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
705088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::DecodeT32(uint32_t instr) {
70511075d15db3f11224e70960ed653462064018a001Vincent Belliard  T32CodeAddressIncrementer incrementer(instr, &code_address_);
705288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  ITBlockScope it_scope(&it_block_);
705388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
705488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  switch (instr & 0xe0000000) {
705588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x00000000: {
705688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // 0x00000000
705788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (instr & 0x18000000) {
705888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x18000000: {
705988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x18000000
706088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x06000000) {
706188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
706288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x18000000
706388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rd = (instr >> 16) & 0x7;
706488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
706588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
706688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              if (InITBlock()) {
706788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ADD<c>{<q>} <Rd>, <Rn>, <Rm> ; T1
706888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                add(CurrentCond(),
706988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
707088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rd),
707188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rn),
707288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rm));
707388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              } else {
707488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                VIXL_ASSERT(OutsideITBlock());
707588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ADDS{<q>} {<Rd>}, <Rn>, <Rm> ; T1
7076fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                adds(Condition::None(),
707788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
707888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rd),
707988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rn),
708088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rm));
708188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
708288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
708388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
708488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x02000000: {
708588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x1a000000
708688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rd = (instr >> 16) & 0x7;
708788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
708888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
708988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              if (InITBlock()) {
709088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SUB<c>{<q>} <Rd>, <Rn>, <Rm> ; T1
709188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                sub(CurrentCond(),
709288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
709388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rd),
709488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rn),
709588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rm));
709688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              } else {
709788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                VIXL_ASSERT(OutsideITBlock());
709888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SUBS{<q>} {<Rd>}, <Rn>, <Rm> ; T1
7099fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                subs(Condition::None(),
710088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
710188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rd),
710288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rn),
710388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rm));
710488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
710588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
710688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
710788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x04000000: {
710888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x1c000000
710988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rd = (instr >> 16) & 0x7;
711088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
711188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              uint32_t imm = (instr >> 22) & 0x7;
711288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              if (InITBlock()) {
711388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ADD<c>{<q>} <Rd>, <Rn>, #<imm3> ; T1
711488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                add(CurrentCond(), Best, Register(rd), Register(rn), imm);
711588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              } else {
711688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                VIXL_ASSERT(OutsideITBlock());
711788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ADDS{<q>} <Rd>, <Rn>, #<imm3> ; T1
7118fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                adds(Condition::None(), Best, Register(rd), Register(rn), imm);
711988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
712088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
712188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
712288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x06000000: {
712388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x1e000000
712488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rd = (instr >> 16) & 0x7;
712588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
712688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              uint32_t imm = (instr >> 22) & 0x7;
712788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              if (InITBlock()) {
712888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SUB<c>{<q>} <Rd>, <Rn>, #<imm3> ; T1
712988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                sub(CurrentCond(), Best, Register(rd), Register(rn), imm);
713088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              } else {
713188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                VIXL_ASSERT(OutsideITBlock());
713288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SUBS{<q>} <Rd>, <Rn>, #<imm3> ; T1
7133fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                subs(Condition::None(), Best, Register(rd), Register(rn), imm);
713488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
713588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
713688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
713788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
713888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
713988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
714088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        default: {
714188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (((instr & 0x18000000) == 0x18000000)) {
714288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnallocatedT32(instr);
714388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            return;
714488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
714588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (((Uint32((instr >> 27)) & Uint32(0x3)) == Uint32(0x2)) &&
714688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              InITBlock()) {
714788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rd = (instr >> 16) & 0x7;
714888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rm = (instr >> 19) & 0x7;
714988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            uint32_t amount = (instr >> 22) & 0x1f;
715088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (amount == 0) amount = 32;
715188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // ASR<c>{<q>} {<Rd>}, <Rm>, #<imm> ; T2
715288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            asr(CurrentCond(), Best, Register(rd), Register(rm), amount);
715388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            return;
715488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
715588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (((Uint32((instr >> 27)) & Uint32(0x3)) == Uint32(0x2)) &&
715688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              !InITBlock()) {
715788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rd = (instr >> 16) & 0x7;
715888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rm = (instr >> 19) & 0x7;
715988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            uint32_t amount = (instr >> 22) & 0x1f;
716088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (amount == 0) amount = 32;
716188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // ASRS{<q>} {<Rd>}, <Rm>, #<imm> ; T2
7162fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard            asrs(Condition::None(), Best, Register(rd), Register(rm), amount);
716388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            return;
716488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
716588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (((Uint32((instr >> 27)) & Uint32(0x3)) == Uint32(0x0)) &&
716688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              ((instr & 0x07c00000) != 0x00000000) && InITBlock()) {
716788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rd = (instr >> 16) & 0x7;
716888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rm = (instr >> 19) & 0x7;
716988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            uint32_t amount = (instr >> 22) & 0x1f;
717088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // LSL<c>{<q>} {<Rd>}, <Rm>, #<imm> ; T2
717188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            lsl(CurrentCond(), Best, Register(rd), Register(rm), amount);
717288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            return;
717388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
717488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (((Uint32((instr >> 27)) & Uint32(0x3)) == Uint32(0x0)) &&
717588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              ((instr & 0x07c00000) != 0x00000000) && !InITBlock()) {
717688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rd = (instr >> 16) & 0x7;
717788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rm = (instr >> 19) & 0x7;
717888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            uint32_t amount = (instr >> 22) & 0x1f;
717988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // LSLS{<q>} {<Rd>}, <Rm>, #<imm> ; T2
7180fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard            lsls(Condition::None(), Best, Register(rd), Register(rm), amount);
718188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            return;
718288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
718388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (((Uint32((instr >> 27)) & Uint32(0x3)) == Uint32(0x1)) &&
718488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              InITBlock()) {
718588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rd = (instr >> 16) & 0x7;
718688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rm = (instr >> 19) & 0x7;
718788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            uint32_t amount = (instr >> 22) & 0x1f;
718888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (amount == 0) amount = 32;
718988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // LSR<c>{<q>} {<Rd>}, <Rm>, #<imm> ; T2
719088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            lsr(CurrentCond(), Best, Register(rd), Register(rm), amount);
719188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            return;
719288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
719388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (((Uint32((instr >> 27)) & Uint32(0x3)) == Uint32(0x1)) &&
719488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              !InITBlock()) {
719588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rd = (instr >> 16) & 0x7;
719688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            unsigned rm = (instr >> 19) & 0x7;
719788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            uint32_t amount = (instr >> 22) & 0x1f;
719888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (amount == 0) amount = 32;
719988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // LSRS{<q>} {<Rd>}, <Rm>, #<imm> ; T2
7200fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard            lsrs(Condition::None(), Best, Register(rd), Register(rm), amount);
720188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            return;
720288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
720388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rd = (instr >> 16) & 0x7;
720488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rm = (instr >> 19) & 0x7;
720588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          ImmediateShiftOperand shift_operand((instr >> 27) & 0x3,
720688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 22) & 0x1f);
720788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (InITBlock()) {
720888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // MOV<c>{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; T2
720988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            mov(CurrentCond(),
721088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Best,
721188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Register(rd),
721288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Operand(Register(rm),
721388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        shift_operand.GetType(),
721488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        shift_operand.GetAmount()));
721588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          } else {
721688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            VIXL_ASSERT(OutsideITBlock());
721788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // MOVS{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; T2
7218fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard            movs(Condition::None(),
721988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                 Best,
722088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                 Register(rd),
722188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                 Operand(Register(rm),
722288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         shift_operand.GetType(),
722388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         shift_operand.GetAmount()));
722488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
722588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
722688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
722788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
722888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
722988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
723088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x20000000: {
723188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // 0x20000000
723288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (instr & 0x18000000) {
723388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x00000000: {
723488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x20000000
723588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rd = (instr >> 24) & 0x7;
723688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          uint32_t imm = (instr >> 16) & 0xff;
723788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (InITBlock()) {
723888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // MOV<c>{<q>} <Rd>, #<imm8> ; T1
723988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            mov(CurrentCond(), Best, Register(rd), imm);
724088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          } else {
724188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            VIXL_ASSERT(OutsideITBlock());
724288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // MOVS{<q>} <Rd>, #<imm8> ; T1
7243fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard            movs(Condition::None(), Best, Register(rd), imm);
724488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
724588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
724688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
724788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x08000000: {
724888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x28000000
724988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rn = (instr >> 24) & 0x7;
725088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          uint32_t imm = (instr >> 16) & 0xff;
725188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // CMP{<c>}{<q>} <Rn>, #<imm8> ; T1
725288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          cmp(CurrentCond(), Best, Register(rn), imm);
725388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
725488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
725588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x10000000: {
725688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x30000000
725788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rd = (instr >> 24) & 0x7;
725888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          uint32_t imm = (instr >> 16) & 0xff;
725988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (InITBlock() && ((imm <= 7))) {
726088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // ADD<c>{<q>} <Rdn>, #<imm8> ; T2
726188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            add(CurrentCond(), Register(rd), imm);
726288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          } else if (InITBlock() && ((imm > 7))) {
726388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // ADD<c>{<q>} {<Rdn>}, <Rdn>, #<imm8> ; T2
726488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            add(CurrentCond(), Best, Register(rd), Register(rd), imm);
726588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          } else if (OutsideITBlock() && ((imm <= 7))) {
726688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // ADDS{<q>} <Rdn>, #<imm8> ; T2
726788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            adds(Register(rd), imm);
726888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          } else {
726988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            VIXL_ASSERT(OutsideITBlock() && ((imm > 7)));
727088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // ADDS{<q>} {<Rdn>}, <Rdn>, #<imm8> ; T2
7271fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard            adds(Condition::None(), Best, Register(rd), Register(rd), imm);
727288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
727388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
727488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
727588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x18000000: {
727688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x38000000
727788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rd = (instr >> 24) & 0x7;
727888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          uint32_t imm = (instr >> 16) & 0xff;
727988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          if (InITBlock() && ((imm <= 7))) {
728088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // SUB<c>{<q>} <Rdn>, #<imm8> ; T2
728188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            sub(CurrentCond(), Register(rd), imm);
728288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          } else if (InITBlock() && ((imm > 7))) {
728388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // SUB<c>{<q>} {<Rdn>}, <Rdn>, #<imm8> ; T2
728488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            sub(CurrentCond(), Best, Register(rd), Register(rd), imm);
728588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          } else if (OutsideITBlock() && ((imm <= 7))) {
728688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // SUBS{<q>} <Rdn>, #<imm8> ; T2
728788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            subs(Register(rd), imm);
728888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          } else {
728988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            VIXL_ASSERT(OutsideITBlock() && ((imm > 7)));
729088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // SUBS{<q>} {<Rdn>}, <Rdn>, #<imm8> ; T2
7291fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard            subs(Condition::None(), Best, Register(rd), Register(rd), imm);
729288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
729388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
729488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
729588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
729688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
729788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
729888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x40000000: {
729988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // 0x40000000
730088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (instr & 0x18000000) {
730188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x00000000: {
730288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x40000000
730388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x07000000) {
730488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
730588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x40000000
730688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x00c00000) {
730788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
730888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x40000000
730988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
731088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
731188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
731288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // AND<c>{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
731388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    and_(CurrentCond(),
731488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
731588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
731688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
731788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rm));
731888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
731988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
732088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ANDS{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
7321fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    ands(Condition::None(),
732288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
732388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
732488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
732588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rm));
732688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
732788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
732888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
732988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00400000: {
733088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x40400000
733188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
733288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
733388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
733488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // EOR<c>{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
733588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    eor(CurrentCond(),
733688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
733788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
733888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
733988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rm));
734088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
734188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
734288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // EORS{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
7343fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    eors(Condition::None(),
734488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
734588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
734688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
734788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rm));
734888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
734988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
735088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
735188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00800000: {
735288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x40800000
735388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
735488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0x7;
735588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 19) & 0x7;
735688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LSL<c>{<q>} {<Rdm>}, <Rdm>, <Rs> ; T1
735788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    lsl(CurrentCond(),
735888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
735988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
736088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
736188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rs));
736288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
736388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
736488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (!InITBlock()) {
736588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0x7;
736688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 19) & 0x7;
736788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LSLS{<q>} {<Rdm>}, <Rdm>, <Rs> ; T1
7368fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    lsls(Condition::None(),
736988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
737088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
737188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
737288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rs));
737388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
737488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
737588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
737688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 16) & 0x7;
737788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rs = (instr >> 19) & 0x7;
737888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
737988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOV<c>{<q>} <Rdm>, <Rdm>, LSL <Rs> ; T1
738088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mov(CurrentCond(),
738188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
738288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
738388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), LSL, Register(rs)));
738488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
738588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
738688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOVS{<q>} <Rdm>, <Rdm>, LSL <Rs> ; T1
7387fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    movs(Condition::None(),
738888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
738988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
739088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), LSL, Register(rs)));
739188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
739288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
739388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
739488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00c00000: {
739588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x40c00000
739688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
739788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0x7;
739888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 19) & 0x7;
739988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LSR<c>{<q>} {<Rdm>}, <Rdm>, <Rs> ; T1
740088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    lsr(CurrentCond(),
740188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
740288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
740388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
740488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rs));
740588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
740688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
740788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (!InITBlock()) {
740888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0x7;
740988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 19) & 0x7;
741088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LSRS{<q>} {<Rdm>}, <Rdm>, <Rs> ; T1
7411fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    lsrs(Condition::None(),
741288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
741388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
741488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
741588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rs));
741688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
741788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
741888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
741988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 16) & 0x7;
742088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rs = (instr >> 19) & 0x7;
742188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
742288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOV<c>{<q>} <Rdm>, <Rdm>, LSR <Rs> ; T1
742388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mov(CurrentCond(),
742488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
742588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
742688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), LSR, Register(rs)));
742788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
742888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
742988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOVS{<q>} <Rdm>, <Rdm>, LSR <Rs> ; T1
7430fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    movs(Condition::None(),
743188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
743288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
743388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), LSR, Register(rs)));
743488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
743588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
743688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
743788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
743888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
743988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
744088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x01000000: {
744188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x41000000
744288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x00c00000) {
744388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
744488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x41000000
744588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
744688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0x7;
744788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 19) & 0x7;
744888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ASR<c>{<q>} {<Rdm>}, <Rdm>, <Rs> ; T1
744988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    asr(CurrentCond(),
745088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
745188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
745288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
745388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rs));
745488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
745588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
745688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (!InITBlock()) {
745788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0x7;
745888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 19) & 0x7;
745988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ASRS{<q>} {<Rdm>}, <Rdm>, <Rs> ; T1
7460fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    asrs(Condition::None(),
746188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
746288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
746388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
746488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rs));
746588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
746688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
746788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
746888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 16) & 0x7;
746988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rs = (instr >> 19) & 0x7;
747088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
747188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOV<c>{<q>} <Rdm>, <Rdm>, ASR <Rs> ; T1
747288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mov(CurrentCond(),
747388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
747488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
747588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), ASR, Register(rs)));
747688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
747788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
747888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOVS{<q>} <Rdm>, <Rdm>, ASR <Rs> ; T1
7479fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    movs(Condition::None(),
748088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
748188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
748288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), ASR, Register(rs)));
748388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
748488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
748588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
748688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00400000: {
748788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x41400000
748888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
748988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
749088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
749188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADC<c>{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
749288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    adc(CurrentCond(),
749388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
749488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
749588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
749688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rm));
749788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
749888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
749988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADCS{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
7500fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    adcs(Condition::None(),
750188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
750288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
750388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
750488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rm));
750588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
750688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
750788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
750888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00800000: {
750988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x41800000
751088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
751188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
751288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
751388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SBC<c>{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
751488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sbc(CurrentCond(),
751588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
751688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
751788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
751888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rm));
751988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
752088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
752188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SBCS{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
7522fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    sbcs(Condition::None(),
752388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
752488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
752588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
752688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rm));
752788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
752888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
752988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
753088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00c00000: {
753188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x41c00000
753288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
753388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0x7;
753488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 19) & 0x7;
753588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ROR<c>{<q>} {<Rdm>}, <Rdm>, <Rs> ; T1
753688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ror(CurrentCond(),
753788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
753888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
753988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
754088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rs));
754188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
754288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
754388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (!InITBlock()) {
754488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0x7;
754588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 19) & 0x7;
754688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RORS{<q>} {<Rdm>}, <Rdm>, <Rs> ; T1
7547fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    rors(Condition::None(),
754888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
754988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
755088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
755188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rs));
755288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
755388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
755488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
755588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 16) & 0x7;
755688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rs = (instr >> 19) & 0x7;
755788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
755888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOV<c>{<q>} <Rdm>, <Rdm>, ROR <Rs> ; T1
755988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mov(CurrentCond(),
756088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
756188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
756288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), ROR, Register(rs)));
756388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
756488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
756588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOVS{<q>} <Rdm>, <Rdm>, ROR <Rs> ; T1
7566fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    movs(Condition::None(),
756788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
756888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
756988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), ROR, Register(rs)));
757088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
757188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
757288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
757388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
757488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
757588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
757688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x02000000: {
757788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x42000000
757888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x00c00000) {
757988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
758088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x42000000
758188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 16) & 0x7;
758288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
758388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // TST{<c>}{<q>} <Rn>, <Rm> ; T1
758488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  tst(CurrentCond(), Best, Register(rn), Register(rm));
758588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
758688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
758788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00400000: {
758888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x42400000
758988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
759088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 19) & 0x7;
759188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
759288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RSB<c>{<q>} {<Rd>}, <Rn>, #0 ; T1
759388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rsb(CurrentCond(),
759488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
759588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
759688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
759788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UINT32_C(0));
759888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
759988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
760088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RSBS{<q>} {<Rd>}, <Rn>, #0 ; T1
7601fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    rsbs(Condition::None(),
760288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
760388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
760488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
760588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         UINT32_C(0));
760688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
760788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
760888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
760988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00800000: {
761088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x42800000
761188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 16) & 0x7;
761288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
761388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // CMP{<c>}{<q>} <Rn>, <Rm> ; T1
761488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  cmp(CurrentCond(), Best, Register(rn), Register(rm));
761588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
761688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
761788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00c00000: {
761888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x42c00000
761988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 16) & 0x7;
762088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
762188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // CMN{<c>}{<q>} <Rn>, <Rm> ; T1
762288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  cmn(CurrentCond(), Best, Register(rn), Register(rm));
762388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
762488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
762588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
762688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
762788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
762888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x03000000: {
762988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x43000000
763088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x00c00000) {
763188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
763288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x43000000
763388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
763488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
763588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
763688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ORR<c>{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
763788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    orr(CurrentCond(),
763888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
763988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
764088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
764188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rm));
764288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
764388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
764488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ORRS{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
7645fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    orrs(Condition::None(),
764688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
764788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
764888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
764988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rm));
765088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
765188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
765288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
765388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00400000: {
765488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x43400000
765588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
765688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 19) & 0x7;
765788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
765888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MUL<c>{<q>} <Rdm>, <Rn>, {<Rdm>} ; T1
765988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mul(CurrentCond(),
766088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
766188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
766288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
766388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd));
766488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
766588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
766688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MULS{<q>} <Rdm>, <Rn>, {<Rdm>} ; T1
7667fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    muls(Condition::None(),
766888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
766988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
767088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd));
767188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
767288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
767388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
767488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00800000: {
767588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x43800000
767688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
767788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
767888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
767988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // BIC<c>{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
768088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bic(CurrentCond(),
768188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
768288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
768388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
768488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rm));
768588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
768688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
768788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // BICS{<q>} {<Rdn>}, <Rdn>, <Rm> ; T1
7688fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    bics(Condition::None(),
768988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
769088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
769188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
769288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rm));
769388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
769488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
769588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
769688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00c00000: {
769788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x43c00000
769888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0x7;
769988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0x7;
770088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (InITBlock()) {
770188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MVN<c>{<q>} <Rd>, <Rm> ; T1
770288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mvn(CurrentCond(), Best, Register(rd), Register(rm));
770388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  } else {
770488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    VIXL_ASSERT(OutsideITBlock());
770588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MVNS{<q>} <Rd>, <Rm> ; T1
7706fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                    mvns(Condition::None(), Best, Register(rd), Register(rm));
770788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
770888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
770988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
771088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
771188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
771288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
771388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x04000000: {
771488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x44000000
771588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x00780000) {
771688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00680000: {
771788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x44680000
771888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = ((instr >> 16) & 0x7) | ((instr >> 20) & 0x8);
771988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // ADD{<c>}{<q>} {<Rdm>}, SP, <Rdm> ; T1
772088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  add(CurrentCond(), Best, Register(rd), sp, Register(rd));
772188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
772288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
772388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                default: {
772488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00870000) {
772588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00850000: {
772688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0x44850000
772788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0x780000) == 0x680000)) {
772888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
772988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
773088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
773188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = (instr >> 19) & 0xf;
773288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // ADD{<c>}{<q>} {SP}, SP, <Rm> ; T2
773388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      add(CurrentCond(), Best, sp, sp, Register(rm));
773488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
773588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
773688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    default: {
773788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0x780000) == 0x680000) ||
773888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr & 0x870000) == 0x850000)) {
773988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
774088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
774188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
774288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd =
774388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 16) & 0x7) | ((instr >> 20) & 0x8);
774488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = (instr >> 19) & 0xf;
774588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (InITBlock()) {
774688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ADD<c>{<q>} <Rdn>, <Rm> ; T2
774788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        add(CurrentCond(), Register(rd), Register(rm));
774888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
774988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ADD{<c>}{<q>} {<Rdn>}, <Rdn>, <Rm> ; T2
775088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        add(CurrentCond(),
775188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
775288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
775388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
775488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
775588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
775688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
775788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
775888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
775988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
776088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
776188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
776288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
776388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
776488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x05000000: {
776588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x45000000
776688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = ((instr >> 16) & 0x7) | ((instr >> 20) & 0x8);
776788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 19) & 0xf;
776888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // CMP{<c>}{<q>} <Rn>, <Rm> ; T2
776988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              cmp(CurrentCond(), Best, Register(rn), Register(rm));
777088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
777188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
777288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x06000000: {
777388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x46000000
777488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rd = ((instr >> 16) & 0x7) | ((instr >> 20) & 0x8);
777588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 19) & 0xf;
777688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // MOV{<c>}{<q>} <Rd>, <Rm> ; T1
777788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              mov(CurrentCond(), Best, Register(rd), Register(rm));
777888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
777988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
778088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x07000000: {
778188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x47000000
778288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x00800000) {
778388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
778488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x47000000
778588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0xf;
778688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // BX{<c>}{<q>} <Rm> ; T1
778788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  bx(CurrentCond(), Register(rm));
778888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xff870000) != 0x47000000)) {
778988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnpredictableT32(instr);
779088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
779188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
779288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
779388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00800000: {
779488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0x47800000
779588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 19) & 0xf;
779688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // BLX{<c>}{<q>} <Rm> ; T1
779788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  blx(CurrentCond(), Register(rm));
779888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xff870000) != 0x47800000)) {
779988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnpredictableT32(instr);
780088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
780188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
780288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
780388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
780488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
780588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
780688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
780788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
780888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
780988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x08000000: {
781088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x48000000
781188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 24) & 0x7;
781288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t imm = ((instr >> 16) & 0xff) << 2;
781388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          Label label(imm, kT32PcDelta);
781488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // LDR{<c>}{<q>} <Rt>, <label> ; T1
781588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          ldr(CurrentCond(), Best, Register(rt), &label);
781688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
781788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
781888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x10000000: {
781988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x50000000
782088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x06000000) {
782188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
782288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x50000000
782388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rt = (instr >> 16) & 0x7;
782488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
782588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Sign sign(plus);
782688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
782788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              AddrMode addrmode = Offset;
782888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // STR{<c>}{<q>} <Rt>, [<Rn>, #{+}<Rm>] ; T1
782988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              str(CurrentCond(),
783088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Best,
783188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Register(rt),
783288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  MemOperand(Register(rn), sign, Register(rm), addrmode));
783388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
783488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
783588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x02000000: {
783688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x52000000
783788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rt = (instr >> 16) & 0x7;
783888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
783988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Sign sign(plus);
784088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
784188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              AddrMode addrmode = Offset;
784288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // STRH{<c>}{<q>} <Rt>, [<Rn>, #{+}<Rm>] ; T1
784388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              strh(CurrentCond(),
784488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   Best,
784588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   Register(rt),
784688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   MemOperand(Register(rn), sign, Register(rm), addrmode));
784788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
784888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
784988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x04000000: {
785088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x54000000
785188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rt = (instr >> 16) & 0x7;
785288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
785388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Sign sign(plus);
785488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
785588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              AddrMode addrmode = Offset;
785688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // STRB{<c>}{<q>} <Rt>, [<Rn>, #{+}<Rm>] ; T1
785788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              strb(CurrentCond(),
785888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   Best,
785988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   Register(rt),
786088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   MemOperand(Register(rn), sign, Register(rm), addrmode));
786188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
786288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
786388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x06000000: {
786488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x56000000
786588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rt = (instr >> 16) & 0x7;
786688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
786788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Sign sign(plus);
786888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
786988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              AddrMode addrmode = Offset;
787088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // LDRSB{<c>}{<q>} <Rt>, [<Rn>, #{+}<Rm>] ; T1
787188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              ldrsb(CurrentCond(),
787288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
787388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
787488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn), sign, Register(rm), addrmode));
787588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
787688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
787788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
787888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
787988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
788088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x18000000: {
788188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x58000000
788288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x06000000) {
788388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
788488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x58000000
788588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rt = (instr >> 16) & 0x7;
788688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
788788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Sign sign(plus);
788888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
788988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              AddrMode addrmode = Offset;
789088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // LDR{<c>}{<q>} <Rt>, [<Rn>, #{+}<Rm>] ; T1
789188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              ldr(CurrentCond(),
789288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Best,
789388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Register(rt),
789488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  MemOperand(Register(rn), sign, Register(rm), addrmode));
789588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
789688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
789788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x02000000: {
789888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x5a000000
789988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rt = (instr >> 16) & 0x7;
790088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
790188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Sign sign(plus);
790288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
790388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              AddrMode addrmode = Offset;
790488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // LDRH{<c>}{<q>} <Rt>, [<Rn>, #{+}<Rm>] ; T1
790588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              ldrh(CurrentCond(),
790688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   Best,
790788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   Register(rt),
790888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   MemOperand(Register(rn), sign, Register(rm), addrmode));
790988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
791088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
791188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x04000000: {
791288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x5c000000
791388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rt = (instr >> 16) & 0x7;
791488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
791588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Sign sign(plus);
791688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
791788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              AddrMode addrmode = Offset;
791888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // LDRB{<c>}{<q>} <Rt>, [<Rn>, #{+}<Rm>] ; T1
791988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              ldrb(CurrentCond(),
792088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   Best,
792188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   Register(rt),
792288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                   MemOperand(Register(rn), sign, Register(rm), addrmode));
792388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
792488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
792588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x06000000: {
792688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0x5e000000
792788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rt = (instr >> 16) & 0x7;
792888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 19) & 0x7;
792988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Sign sign(plus);
793088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rm = (instr >> 22) & 0x7;
793188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              AddrMode addrmode = Offset;
793288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // LDRSH{<c>}{<q>} <Rt>, [<Rn>, #{+}<Rm>] ; T1
793388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              ldrsh(CurrentCond(),
793488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
793588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
793688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn), sign, Register(rm), addrmode));
793788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
793888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
793988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
794088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
794188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
794288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
794388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
794488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
794588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x60000000: {
794688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // 0x60000000
794788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (instr & 0x18000000) {
794888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x00000000: {
794988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x60000000
795088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 16) & 0x7;
795188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rn = (instr >> 19) & 0x7;
795288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t offset = ((instr >> 22) & 0x1f) << 2;
795388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // STR{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm>}] ; T1
795488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          str(CurrentCond(),
795588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Best,
795688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Register(rt),
795788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              MemOperand(Register(rn), plus, offset, Offset));
795888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
795988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
796088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x08000000: {
796188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x68000000
796288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 16) & 0x7;
796388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rn = (instr >> 19) & 0x7;
796488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t offset = ((instr >> 22) & 0x1f) << 2;
796588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // LDR{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm>}] ; T1
796688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          ldr(CurrentCond(),
796788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Best,
796888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Register(rt),
796988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              MemOperand(Register(rn), plus, offset, Offset));
797088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
797188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
797288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x10000000: {
797388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x70000000
797488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 16) & 0x7;
797588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rn = (instr >> 19) & 0x7;
797688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t offset = (instr >> 22) & 0x1f;
797788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // STRB{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm>}] ; T1
797888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          strb(CurrentCond(),
797988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               Best,
798088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               Register(rt),
798188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               MemOperand(Register(rn), plus, offset, Offset));
798288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
798388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
798488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x18000000: {
798588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x78000000
798688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 16) & 0x7;
798788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rn = (instr >> 19) & 0x7;
798888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t offset = (instr >> 22) & 0x1f;
798988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // LDRB{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm>}] ; T1
799088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          ldrb(CurrentCond(),
799188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               Best,
799288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               Register(rt),
799388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               MemOperand(Register(rn), plus, offset, Offset));
799488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
799588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
799688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
799788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
799888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
799988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0x80000000: {
800088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // 0x80000000
800188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (instr & 0x18000000) {
800288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x00000000: {
800388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x80000000
800488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 16) & 0x7;
800588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rn = (instr >> 19) & 0x7;
800688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t offset = ((instr >> 22) & 0x1f) << 1;
800788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // STRH{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm>}] ; T1
800888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          strh(CurrentCond(),
800988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               Best,
801088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               Register(rt),
801188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               MemOperand(Register(rn), plus, offset, Offset));
801288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
801388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
801488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x08000000: {
801588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x88000000
801688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 16) & 0x7;
801788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rn = (instr >> 19) & 0x7;
801888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t offset = ((instr >> 22) & 0x1f) << 1;
801988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // LDRH{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm>}] ; T1
802088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          ldrh(CurrentCond(),
802188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               Best,
802288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               Register(rt),
802388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois               MemOperand(Register(rn), plus, offset, Offset));
802488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
802588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
802688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x10000000: {
802788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x90000000
802888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 24) & 0x7;
802988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t offset = ((instr >> 16) & 0xff) << 2;
803088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // STR{<c>}{<q>} <Rt>, [SP{, #{+}<imm>}] ; T2
803188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          str(CurrentCond(),
803288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Best,
803388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Register(rt),
803488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              MemOperand(sp, plus, offset, Offset));
803588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
803688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
803788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x18000000: {
803888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0x98000000
803988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rt = (instr >> 24) & 0x7;
804088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t offset = ((instr >> 16) & 0xff) << 2;
804188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // LDR{<c>}{<q>} <Rt>, [SP{, #{+}<imm>}] ; T2
804288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          ldr(CurrentCond(),
804388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Best,
804488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Register(rt),
804588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              MemOperand(sp, plus, offset, Offset));
804688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
804788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
804888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
804988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
805088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
805188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0xa0000000: {
805288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // 0xa0000000
805388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (instr & 0x18000000) {
805488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x00000000: {
805588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0xa0000000
805688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rd = (instr >> 24) & 0x7;
805788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          int32_t imm = ((instr >> 16) & 0xff) << 2;
805888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          Label label(imm, kT32PcDelta);
805988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // ADR{<c>}{<q>} <Rd>, <label> ; T1
806088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          adr(CurrentCond(), Best, Register(rd), &label);
806188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
806288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
806388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x08000000: {
806488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0xa8000000
806588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          unsigned rd = (instr >> 24) & 0x7;
806688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          uint32_t imm = ((instr >> 16) & 0xff) << 2;
806788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // ADD{<c>}{<q>} <Rd>, SP, #<imm8> ; T1
806888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          add(CurrentCond(), Best, Register(rd), sp, imm);
806988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
807088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
807188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x10000000: {
807288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0xb0000000
807388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x04000000) {
807488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
807588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xb0000000
807688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x01000000) {
807788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
807888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xb0000000
807988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x02800000) {
808088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
808188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xb0000000
808288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ((instr >> 16) & 0x7f) << 2;
808388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // ADD{<c>}{<q>} {SP}, SP, #<imm7> ; T2
808488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      add(CurrentCond(), Best, sp, sp, imm);
808588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
808688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
808788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00800000: {
808888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xb0800000
808988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ((instr >> 16) & 0x7f) << 2;
809088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SUB{<c>}{<q>} {SP}, SP, #<imm7> ; T1
809188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sub(CurrentCond(), Best, sp, sp, imm);
809288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
809388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
809488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02000000: {
809588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xb2000000
809688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00400000) {
809788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
809888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xb2000000
809988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 16) & 0x7;
810088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 19) & 0x7;
810188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SXTH{<c>}{<q>} {<Rd>}, <Rm> ; T1
810288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          sxth(CurrentCond(), Best, Register(rd), Register(rm));
810388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
810488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
810588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400000: {
810688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xb2400000
810788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 16) & 0x7;
810888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 19) & 0x7;
810988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SXTB{<c>}{<q>} {<Rd>}, <Rm> ; T1
811088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          sxtb(CurrentCond(), Best, Register(rd), Register(rm));
811188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
811288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
811388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
811488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
811588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
811688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02800000: {
811788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xb2800000
811888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00400000) {
811988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
812088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xb2800000
812188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 16) & 0x7;
812288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 19) & 0x7;
812388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // UXTH{<c>}{<q>} {<Rd>}, <Rm> ; T1
812488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uxth(CurrentCond(), Best, Register(rd), Register(rm));
812588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
812688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
812788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400000: {
812888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xb2c00000
812988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 16) & 0x7;
813088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 19) & 0x7;
813188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // UXTB{<c>}{<q>} {<Rd>}, <Rm> ; T1
813288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uxtb(CurrentCond(), Best, Register(rd), Register(rm));
813388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
813488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
813588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
813688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
813788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
813888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
813988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
814088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
814188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01000000: {
814288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xb1000000
814388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 16) & 0x7;
814488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  int32_t imm =
814588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      (((instr >> 19) & 0x1f) | ((instr >> 20) & 0x20)) << 1;
814688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Label label(imm, kT32PcDelta);
814788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // CBZ{<q>} <Rn>, <label> ; T1
814888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  cbz(Register(rn), &label);
814988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
815088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
815188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
815288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
815388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
815488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x04000000: {
815588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xb4000000
815688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x02000000) {
815788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
815888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xb4000000
815988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  RegisterList registers((((instr >> 24) & 0x1) << kLRRegNum) |
816088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         ((instr >> 16) & 0xff));
816188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // PUSH{<c>}{<q>} <registers> ; T1
816288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  push(CurrentCond(), Best, registers);
816388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
816488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
816588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x02000000: {
816688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xb6000000
816788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x01e00000) {
816888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
816988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xb6400000
817088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedT32_16("SETEND", instr);
817188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
817288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
817388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
817488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xb6600000
817588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00100000) {
817688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
817788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xb6600000
817888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_16("CPSIE", instr);
817988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
818088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
818188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00100000: {
818288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xb6700000
818388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_16("CPSID", instr);
818488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
818588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
818688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
818788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
818888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
81894339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
819088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
819188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
819288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
819388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
819488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
819588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
819688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
819788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
819888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
819988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
820088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
820188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x18000000: {
820288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0xb8000000
820388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x04000000) {
820488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
820588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xb8000000
820688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x01000000) {
820788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
820888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xb8000000
820988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x02c00000) {
821088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02000000: {
821188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xba000000
821288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 16) & 0x7;
821388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = (instr >> 19) & 0x7;
821488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // REV{<c>}{<q>} <Rd>, <Rm> ; T1
821588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      rev(CurrentCond(), Best, Register(rd), Register(rm));
821688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
821788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
821888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02400000: {
821988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xba400000
822088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 16) & 0x7;
822188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = (instr >> 19) & 0x7;
822288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // REV16{<c>}{<q>} <Rd>, <Rm> ; T1
822388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      rev16(CurrentCond(), Best, Register(rd), Register(rm));
822488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
822588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
822688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02800000: {
822788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xba800000
822888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = (instr >> 16) & 0x3f;
822988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // HLT{<q>} {#}<imm> ; T1
8230fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                      hlt(Condition::None(), imm);
823188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
823288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
823388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02c00000: {
823488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xbac00000
823588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 16) & 0x7;
823688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = (instr >> 19) & 0x7;
823788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // REVSH{<c>}{<q>} <Rd>, <Rm> ; T1
823888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      revsh(CurrentCond(), Best, Register(rd), Register(rm));
823988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
824088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
82414339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
824288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
824388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
824488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
824588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
824688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
824788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01000000: {
824888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xb9000000
824988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 16) & 0x7;
825088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  int32_t imm =
825188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      (((instr >> 19) & 0x1f) | ((instr >> 20) & 0x20)) << 1;
825288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Label label(imm, kT32PcDelta);
825388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // CBNZ{<q>} <Rn>, <label> ; T1
825488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  cbnz(Register(rn), &label);
825588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
825688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
825788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
825888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
825988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
826088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x04000000: {
826188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xbc000000
826288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x02000000) {
826388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
826488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xbc000000
826588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  RegisterList registers((((instr >> 24) & 0x1) << kPCRegNum) |
826688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         ((instr >> 16) & 0xff));
826788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // POP{<c>}{<q>} <registers> ; T1
826888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  pop(CurrentCond(), Best, registers);
826988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
827088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
827188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x02000000: {
827288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xbe000000
827388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x01000000) {
827488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
827588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xbe000000
827688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = (instr >> 16) & 0xff;
827788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // BKPT{<q>} {#}<imm> ; T1
8278fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                      bkpt(Condition::None(), imm);
827988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
828088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
828188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01000000: {
828288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xbf000000
828388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
828488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
828588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xbf000000
828688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00f00000) {
828788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
828888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xbf000000
828988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // NOP{<c>}{<q>} ; T1
829088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              nop(CurrentCond(), Best);
829188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
829288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
829388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100000: {
829488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xbf100000
829588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // YIELD{<c>}{<q>} ; T1
829688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              yield(CurrentCond(), Best);
829788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
829888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
829988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
830088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xbf200000
830188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_16("WFE", instr);
830288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
830388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
830488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300000: {
830588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xbf300000
830688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_16("WFI", instr);
830788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
830888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
830988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00400000: {
831088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xbf400000
831188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_16("SEV", instr);
831288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
831388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
831488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00500000: {
831588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xbf500000
831688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_16("SEVL", instr);
831788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
831888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
83194339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
832088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
832188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
832288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
832388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
832488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
832588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
832688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0x0)) {
832788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
832888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
832988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
833088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned firstcond = (instr >> 20) & 0xf;
833188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned mask = (instr >> 16) & 0xf;
833288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          bool wasInITBlock = InITBlock();
833388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          SetIT(Condition(firstcond), mask);
833488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          it(Condition(firstcond), mask);
833588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (wasInITBlock || (firstcond == 15) ||
833688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((firstcond == al) &&
833788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (BitCount(Uint32(mask)) != 1))) {
833888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
833988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
834088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
834188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
834288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
834388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
834488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
834588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
834688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
834788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
834888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
834988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
835088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
835188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
835288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
835388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
835488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
835588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
835688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
835788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0xc0000000: {
835888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // 0xc0000000
835988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (instr & 0x10000000) {
836088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x00000000: {
836188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0xc0000000
836288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x08000000) {
836388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
836488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xc0000000
836588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 24) & 0x7;
836688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              RegisterList registers(((instr >> 16) & 0xff));
836788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // STM{<c>}{<q>} <Rn>!, <registers> ; T1
836888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              stm(CurrentCond(),
836988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Best,
837088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Register(rn),
837188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  WriteBack(WRITE_BACK),
837288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  registers);
837388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
837488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
837588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x08000000: {
837688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xc8000000
837788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              unsigned rn = (instr >> 24) & 0x7;
837888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              RegisterList registers(((instr >> 16) & 0xff));
837988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // LDM{<c>}{<q>} <Rn>{!}, <registers> ; T1
838088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              ldm(CurrentCond(),
838188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Best,
838288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Register(rn),
838388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  WriteBack(!registers.Includes(Register(rn))),
838488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  registers);
838588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
838688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
838788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
838888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
838988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
839088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x10000000: {
839188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0xd0000000
839288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x0e000000) {
839388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x0e000000: {
839488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xde000000
839588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x01000000) {
839688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
839788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xde000000
839888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  uint32_t imm = (instr >> 16) & 0xff;
839988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // UDF{<c>}{<q>} {#}<imm> ; T1
840088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  udf(CurrentCond(), Best, imm);
840188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
840288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
840388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01000000: {
840488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xdf000000
840588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  uint32_t imm = (instr >> 16) & 0xff;
840688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // SVC{<c>}{<q>} {#}<imm> ; T1
840788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  svc(CurrentCond(), imm);
840888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
840988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
841088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
841188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
841288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
841388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            default: {
841488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              if (((instr & 0xe000000) == 0xe000000)) {
841588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedT32(instr);
841688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                return;
841788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
841888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Condition condition((instr >> 24) & 0xf);
841988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              int32_t imm = SignExtend<int32_t>((instr >> 16) & 0xff, 8) << 1;
842088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Label label(imm, kT32PcDelta);
842188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // B<c>{<q>} <label> ; T1
842288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              b(condition, Best, &label);
842388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
842488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
842588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
842688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
842788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
842888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
842988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
843088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
843188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    case 0xe0000000: {
843288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      // 0xe0000000
843388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      switch (instr & 0x08000000) {
843488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x00000000: {
843588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0xe0000000
843688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x10000000) {
843788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
843888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xe0000000
843988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              int32_t imm = SignExtend<int32_t>((instr >> 16) & 0x7ff, 11) << 1;
844088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              Label label(imm, kT32PcDelta);
844188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // B{<c>}{<q>} <label> ; T2
844288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              b(CurrentCond(), Best, &label);
844388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
844488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
844588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x10000000: {
844688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xf0000000
844788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x00008000) {
844888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
844988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xf0000000
845088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x03f00000) {
845188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
845288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0000000
845388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
845488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
845588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
845688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
845788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
845888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // AND{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
845988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      and_(CurrentCond(),
846088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Best,
846188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
846288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
846388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           imm);
846488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
846588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
846688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00100000: {
846788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0100000
846888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
846988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
847088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf0100f00
847188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
847288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
847388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
847488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
847588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // TST{<c>}{<q>} <Rn>, #<const> ; T1
847688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          tst(CurrentCond(), Best, Register(rn), imm);
847788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
847888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
847988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
848088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf00) == 0xf00)) {
848188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
848288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
848388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
848488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
848588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
848688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
848788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
848888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
848988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ANDS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
849088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ands(CurrentCond(),
849188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
849288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
849388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
849488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               imm);
849588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
849688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
849788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
849888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
849988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
850088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
850188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0200000
850288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
850388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
850488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
850588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
850688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
850788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // BIC{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
850888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      bic(CurrentCond(), Best, Register(rd), Register(rn), imm);
850988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
851088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
851188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00300000: {
851288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0300000
851388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
851488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
851588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
851688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
851788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
851888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // BICS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
851988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      bics(CurrentCond(),
852088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Best,
852188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
852288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
852388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           imm);
852488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
852588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
852688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
852788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0400000
852888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
852988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
853088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf04f0000
853188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
853288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
853388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
853488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
853588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
853688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00000000 &&
853788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd < kNumberOfT32LowRegisters) &&
853888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (imm <= 255))) {
853988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // MOV<c>.W <Rd>, #<const> ; T2
854088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            mov(CurrentCond(), Wide, Register(rd), imm);
854188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
854288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
854388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // MOV{<c>}{<q>} <Rd>, #<const> ; T2
854488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            mov(CurrentCond(), Best, Register(rd), imm);
854588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
854688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
854788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
854888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
854988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
855088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
855188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
855288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
855388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
855488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
855588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
855688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
855788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
855888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ORR{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
855988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          orr(CurrentCond(),
856088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
856188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
856288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
856388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              imm);
856488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
856588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
856688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
856788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
856888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
856988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00500000: {
857088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0500000
857188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
857288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
857388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf05f0000
857488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
857588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
857688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
857788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
857888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() &&
857988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00100000 &&
858088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd < kNumberOfT32LowRegisters) &&
858188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (imm <= 255))) {
858288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // MOVS.W <Rd>, #<const> ; T2
8583fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                            movs(Condition::None(), Wide, Register(rd), imm);
858488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
858588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
858688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // MOVS{<c>}{<q>} <Rd>, #<const> ; T2
858788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            movs(CurrentCond(), Best, Register(rd), imm);
858888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
858988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
859088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
859188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
859288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
859388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
859488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
859588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
859688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
859788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
859888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
859988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
860088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
860188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ORRS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
860288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          orrs(CurrentCond(),
860388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
860488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
860588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
860688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               imm);
860788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
860888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
860988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
861088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
861188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
861288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
861388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0600000
861488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
861588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
861688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf06f0000
861788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
861888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
861988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
862088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
862188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // MVN{<c>}{<q>} <Rd>, #<const> ; T1
862288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          mvn(CurrentCond(), Best, Register(rd), imm);
862388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
862488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
862588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
862688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
862788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
862888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
862988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
863088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
863188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
863288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
863388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
863488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
863588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ORN{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
863688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          orn(CurrentCond(), Register(rd), Register(rn), imm);
863788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
863888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
863988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
864088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
864188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
864288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00700000: {
864388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0700000
864488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
864588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
864688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf07f0000
864788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
864888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
864988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
865088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
865188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // MVNS{<c>}{<q>} <Rd>, #<const> ; T1
865288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          mvns(CurrentCond(), Best, Register(rd), imm);
865388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
865488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
865588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
865688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
865788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
865888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
865988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
866088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
866188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
866288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
866388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
866488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
866588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ORNS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
866688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          orns(CurrentCond(), Register(rd), Register(rn), imm);
866788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
866888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
866988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
867088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
867188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
867288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00800000: {
867388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0800000
867488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
867588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
867688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
867788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
867888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
867988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // EOR{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
868088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      eor(CurrentCond(), Best, Register(rd), Register(rn), imm);
868188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
868288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
868388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00900000: {
868488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0900000
868588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
868688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
868788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf0900f00
868888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
868988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
869088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
869188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
869288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // TEQ{<c>}{<q>} <Rn>, #<const> ; T1
869388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          teq(CurrentCond(), Register(rn), imm);
869488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
869588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
869688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
869788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf00) == 0xf00)) {
869888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
869988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
870088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
870188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
870288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
870388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
870488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
870588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
870688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // EORS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
870788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          eors(CurrentCond(),
870888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
870988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
871088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
871188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               imm);
871288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
871388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
871488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
871588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
871688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
871788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01000000: {
871888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1000000
871988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
872088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000d0000: {
872188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf10d0000
872288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
872388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
872488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
872588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
872688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x00100000) == 0x00000000 &&
872788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((rd < kNumberOfT32LowRegisters) &&
872888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((imm <= 1020) && ((imm & 3) == 0))) ||
872988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               ((rd == sp.GetCode()) &&
873088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((imm <= 508) && ((imm & 3) == 0))))) {
873188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADD{<c>}.W {<Rd>}, SP, #<const> ; T3
873288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(CurrentCond(), Wide, Register(rd), sp, imm);
873388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
873488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
873588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADD{<c>}{<q>} {<Rd>}, SP, #<const> ; T3
873688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(CurrentCond(), Best, Register(rd), sp, imm);
873788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
873888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
873988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
874088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
874188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xd0000)) {
874288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
874388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
874488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
874588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
874688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
874788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
874888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
874988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
875088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
875188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00000000 &&
875288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((rd < kNumberOfT32LowRegisters) &&
875388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (rn < kNumberOfT32LowRegisters) &&
875488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (imm <= 7)) ||
875588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
875688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (imm <= 255)))) {
875788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADD<c>.W {<Rd>}, <Rn>, #<const> ; T3
875888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(CurrentCond(),
875988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
876088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
876188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
876288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm);
876388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
876488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
876588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADD{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T3
876688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(CurrentCond(),
876788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
876888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
876988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
877088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm);
877188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
877288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
877388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
877488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
877588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
877688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
877788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01100000: {
877888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1100000
877988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
878088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
878188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf1100f00
878288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
878388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
878488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
878588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
878688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // CMN{<c>}{<q>} <Rn>, #<const> ; T1
878788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          cmn(CurrentCond(), Best, Register(rn), imm);
878888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
878988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
879088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
879188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
879288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000d0000: {
879388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf11d0000
879488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf00) == 0xf00)) {
879588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
879688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
879788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
879888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
879988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm = ImmediateT32::Decode(
880088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0xff) | ((instr >> 4) & 0x700) |
880188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 15) & 0x800));
880288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ADDS{<c>}{<q>} {<Rd>}, SP, #<const> ; T3
880388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              adds(CurrentCond(), Best, Register(rd), sp, imm);
880488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
880588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
880688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
880788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xd0000) ||
880888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf00) == 0xf00)) {
880988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
881088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
881188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
881288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
881388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
881488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm = ImmediateT32::Decode(
881588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0xff) | ((instr >> 4) & 0x700) |
881688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 15) & 0x800));
881788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (OutsideITBlock() &&
881888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00100000 &&
881988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (((rd < kNumberOfT32LowRegisters) &&
882088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (rn < kNumberOfT32LowRegisters) &&
882188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (imm <= 7)) ||
882288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   ((rd == rn) &&
882388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (rd < kNumberOfT32LowRegisters) &&
882488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (imm <= 255)))) {
882588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADDS.W {<Rd>}, <Rn>, #<const> ; T3
8826fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                adds(Condition::None(),
882788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
882888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
882988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
883088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     imm);
883188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
883288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
883388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADDS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T3
883488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                adds(CurrentCond(),
883588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
883688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
883788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
883888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     imm);
883988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
884088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
884188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
884288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
884388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
884488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
884588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
884688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
884788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
884888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01400000: {
884988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1400000
885088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
885188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
885288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
885388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
885488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
885588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // ADC{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
885688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      adc(CurrentCond(), Best, Register(rd), Register(rn), imm);
885788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
885888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
885988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01500000: {
886088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1500000
886188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
886288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
886388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
886488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
886588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
886688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // ADCS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
886788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      adcs(CurrentCond(),
886888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Best,
886988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
887088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
887188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           imm);
887288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
887388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
887488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01600000: {
887588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1600000
887688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
887788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
887888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
887988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
888088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
888188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SBC{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
888288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sbc(CurrentCond(), Best, Register(rd), Register(rn), imm);
888388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
888488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
888588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01700000: {
888688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1700000
888788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
888888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
888988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
889088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
889188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
889288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SBCS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T1
889388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sbcs(CurrentCond(),
889488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Best,
889588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
889688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
889788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           imm);
889888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
889988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
890088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01a00000: {
890188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1a00000
890288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
890388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000d0000: {
890488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf1ad0000
890588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
890688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
890788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
890888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
890988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x00100000) == 0x00000000 &&
891088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == sp.GetCode()) &&
891188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               ((imm <= 508) && ((imm & 3) == 0)))) {
891288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SUB{<c>}.W {<Rd>}, SP, #<const> ; T2
891388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(CurrentCond(), Wide, Register(rd), sp, imm);
891488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
891588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
891688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SUB{<c>}{<q>} {<Rd>}, SP, #<const> ; T2
891788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(CurrentCond(), Best, Register(rd), sp, imm);
891888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
891988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
892088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
892188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
892288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xd0000)) {
892388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
892488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
892588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
892688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
892788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
892888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
892988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
893088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
893188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
893288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00000000 &&
893388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((rd < kNumberOfT32LowRegisters) &&
893488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (rn < kNumberOfT32LowRegisters) &&
893588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (imm <= 7)) ||
893688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
893788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (imm <= 255)))) {
893888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SUB<c>.W {<Rd>}, <Rn>, #<const> ; T3
893988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(CurrentCond(),
894088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
894188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
894288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
894388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm);
894488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
894588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
894688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SUB{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T3
894788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(CurrentCond(),
894888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
894988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
895088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
895188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm);
895288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
895388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
895488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
895588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
895688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
895788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
895888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01b00000: {
895988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1b00000
896088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
896188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
896288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf1b00f00
896388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
896488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateT32::Decode(
896588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0xff) | ((instr >> 4) & 0x700) |
896688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 15) & 0x800));
896788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((rn < kNumberOfT32LowRegisters) && (imm <= 255)) {
896888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // CMP{<c>}.W <Rn>, #<const> ; T2
896988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            cmp(CurrentCond(), Wide, Register(rn), imm);
897088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
897188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // CMP{<c>}{<q>} <Rn>, #<const> ; T2
897288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            cmp(CurrentCond(), Best, Register(rn), imm);
897388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
897488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
897588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
897688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
897788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
897888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000d0000: {
897988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf1bd0000
898088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf00) == 0xf00)) {
898188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
898288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
898388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
898488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
898588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm = ImmediateT32::Decode(
898688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0xff) | ((instr >> 4) & 0x700) |
898788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 15) & 0x800));
898888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // SUBS{<c>}{<q>} {<Rd>}, SP, #<const> ; T2
898988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              subs(CurrentCond(), Best, Register(rd), sp, imm);
899088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
899188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
899288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
899388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xd0000) ||
899488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf00) == 0xf00)) {
899588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
899688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
899788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
899888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
899988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
900088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm = ImmediateT32::Decode(
900188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0xff) | ((instr >> 4) & 0x700) |
900288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 15) & 0x800));
900388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (OutsideITBlock() &&
900488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00100000 &&
900588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (((rd < kNumberOfT32LowRegisters) &&
900688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (rn < kNumberOfT32LowRegisters) &&
900788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (imm <= 7)) ||
900888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   ((rd == rn) &&
900988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (rd < kNumberOfT32LowRegisters) &&
901088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (imm <= 255)))) {
901188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SUBS.W {<Rd>}, <Rn>, #<const> ; T3
9012fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                subs(Condition::None(),
901388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
901488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
901588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
901688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     imm);
901788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
901888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
901988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SUBS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T3
902088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                subs(CurrentCond(),
902188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
902288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
902388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
902488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     imm);
902588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
902688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
902788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
902888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
902988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
903088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
903188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
903288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
903388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
903488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01c00000: {
903588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1c00000
903688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
903788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
903888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
903988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
904088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
904188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (InITBlock() && (instr & 0x00100000) == 0x00000000 &&
904288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (imm == 0) &&
904388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((rd < kNumberOfT32LowRegisters) &&
904488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           (rn < kNumberOfT32LowRegisters) && (imm == 0))) {
904588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // RSB<c>.W {<Rd>}, <Rn>, #0 ; T2
904688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        rsb(CurrentCond(),
904788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Wide,
904888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
904988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
905088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UINT32_C(0));
905188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
905288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
905388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // RSB{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T2
905488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        rsb(CurrentCond(),
905588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
905688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
905788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
905888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            imm);
905988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
906088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
906188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
906288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01d00000: {
906388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf1d00000
906488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
906588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
906688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = ImmediateT32::Decode(
906788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0xff) | ((instr >> 4) & 0x700) |
906888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 15) & 0x800));
906988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (OutsideITBlock() &&
907088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0x00100000) == 0x00100000 && (imm == 0) &&
907188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((rd < kNumberOfT32LowRegisters) &&
907288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           (rn < kNumberOfT32LowRegisters) && (imm == 0))) {
907388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // RSBS.W {<Rd>}, <Rn>, #0 ; T2
9074fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                        rsbs(Condition::None(),
907588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Wide,
907688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
907788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
907888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             UINT32_C(0));
907988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
908088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
908188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // RSBS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; T2
908288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        rsbs(CurrentCond(),
908388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
908488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
908588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
908688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             imm);
908788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
908888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
908988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
909088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02000000: {
909188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf2000000
909288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000d0000) {
909388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000d0000: {
909488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf20d0000
909588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00020000) {
909688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
909788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf20d0000
909888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
909988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm = (instr & 0xff) |
910088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             ((instr >> 4) & 0x700) |
910188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             ((instr >> 15) & 0x800);
910288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((rd >= kNumberOfT32LowRegisters) ||
910388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   ((imm > 1020) || ((imm & 3) != 0))) &&
910488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd != sp.GetCode()) ||
910588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   ((imm > 508) || ((imm & 3) != 0))) &&
910688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (!ImmediateT32::IsImmediateT32(imm))) {
910788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADD{<c>}{<q>} {<Rd>}, SP, #<imm12> ; T4
910888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                add(CurrentCond(), Best, Register(rd), sp, imm);
910988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
911088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADDW{<c>}{<q>} {<Rd>}, SP, #<imm12> ; T4
911188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                addw(CurrentCond(), Register(rd), sp, imm);
911288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
911388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
911488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
911588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00020000: {
911688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf20f0000
911788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
911888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t imm = (instr & 0xff) |
911988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 4) & 0x700) |
912088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 15) & 0x800);
912188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Label label(imm, kT32PcDelta);
912288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((imm >= 0) && (imm <= 4095) &&
912388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
912488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (imm >= 0) && (imm <= 1020) &&
912588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   ((imm & 3) == 0))) {
912688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADR{<c>}.W <Rd>, <label> ; T3
912788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                adr(CurrentCond(), Wide, Register(rd), &label);
912888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
912988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADR{<c>}{<q>} <Rd>, <label> ; T3
913088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                adr(CurrentCond(), Best, Register(rd), &label);
913188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
913288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
913388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
913488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
913588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
913688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
913788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
913888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xd0000) == 0xd0000)) {
913988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
914088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
914188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
914288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
914388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
914488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = (instr & 0xff) |
914588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         ((instr >> 4) & 0x700) |
914688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         ((instr >> 15) & 0x800);
914788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((InITBlock() ||
914888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rd >= kNumberOfT32LowRegisters) ||
914988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rn >= kNumberOfT32LowRegisters) || (imm > 7)) &&
915088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (InITBlock() || (rd != rn) ||
915188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rd >= kNumberOfT32LowRegisters) ||
915288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (imm > 255)) &&
915388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (!ImmediateT32::IsImmediateT32(imm))) {
915488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADD{<c>}{<q>} {<Rd>}, <Rn>, #<imm12> ; T4
915588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(CurrentCond(),
915688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
915788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
915888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
915988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm);
916088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
916188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADDW{<c>}{<q>} {<Rd>}, <Rn>, #<imm12> ; T4
916288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            addw(CurrentCond(),
916388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
916488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
916588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 imm);
916688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
916788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
916888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
916988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
917088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
917188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
917288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02400000: {
917388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf2400000
917488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
917588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = (instr & 0xff) | ((instr >> 4) & 0x700) |
917688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((instr >> 15) & 0x800) |
917788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((instr >> 4) & 0xf000);
917888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((InITBlock() || (rd >= kNumberOfT32LowRegisters) ||
917988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           (imm > 255)) &&
918088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (!ImmediateT32::IsImmediateT32(imm))) {
918188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MOV{<c>}{<q>} <Rd>, #<imm16> ; T3
918288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mov(CurrentCond(), Best, Register(rd), imm);
918388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
918488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MOVW{<c>}{<q>} <Rd>, #<imm16> ; T3
918588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        movw(CurrentCond(), Register(rd), imm);
918688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
918788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
918888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
918988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02a00000: {
919088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf2a00000
919188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000d0000) {
919288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000d0000: {
919388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf2ad0000
919488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00020000) {
919588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
919688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf2ad0000
919788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
919888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm = (instr & 0xff) |
919988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             ((instr >> 4) & 0x700) |
920088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             ((instr >> 15) & 0x800);
920188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((rd != sp.GetCode()) ||
920288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   ((imm > 508) || ((imm & 3) != 0))) &&
920388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (!ImmediateT32::IsImmediateT32(imm))) {
920488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SUB{<c>}{<q>} {<Rd>}, SP, #<imm12> ; T3
920588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sub(CurrentCond(), Best, Register(rd), sp, imm);
920688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
920788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SUBW{<c>}{<q>} {<Rd>}, SP, #<imm12> ; T3
920888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                subw(CurrentCond(), Register(rd), sp, imm);
920988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
921088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
921188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
921288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00020000: {
921388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf2af0000
921488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((((Uint32((instr >> 26)) & Uint32(0x1))
921588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     << 11) |
921688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((Uint32((instr >> 12)) & Uint32(0x7))
921788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     << 8) |
921888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (Uint32(instr) & Uint32(0xff))) ==
921988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x0))) {
922088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
922188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = (instr & 0xff) |
922288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               ((instr >> 4) & 0x700) |
922388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               ((instr >> 15) & 0x800);
922488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SUB{<c>}{<q>} <Rd>, PC, #<imm12> ; T2
922588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sub(CurrentCond(), Best, Register(rd), pc, imm);
922688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
922788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
922888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
922988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t imm = (instr & 0xff) |
923088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 4) & 0x700) |
923188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 15) & 0x800);
923288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Label label(-imm, kT32PcDelta);
923388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ADR{<c>}{<q>} <Rd>, <label> ; T2
923488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              adr(CurrentCond(), Best, Register(rd), &label);
923588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
923688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
923788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
923888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
923988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
924088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
924188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xd0000) == 0xd0000)) {
924288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
924388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
924488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
924588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
924688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
924788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = (instr & 0xff) |
924888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         ((instr >> 4) & 0x700) |
924988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         ((instr >> 15) & 0x800);
925088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((InITBlock() ||
925188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rd >= kNumberOfT32LowRegisters) ||
925288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rn >= kNumberOfT32LowRegisters) || (imm > 7)) &&
925388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (InITBlock() || (rd != rn) ||
925488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rd >= kNumberOfT32LowRegisters) ||
925588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (imm > 255)) &&
925688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (!ImmediateT32::IsImmediateT32(imm))) {
925788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SUB{<c>}{<q>} {<Rd>}, <Rn>, #<imm12> ; T4
925888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(CurrentCond(),
925988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
926088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
926188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
926288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm);
926388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
926488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SUBW{<c>}{<q>} {<Rd>}, <Rn>, #<imm12> ; T4
926588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            subw(CurrentCond(),
926688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
926788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
926888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 imm);
926988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
927088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
927188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
927288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
927388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
927488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
927588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x02c00000: {
927688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf2c00000
927788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
927888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = (instr & 0xff) | ((instr >> 4) & 0x700) |
927988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((instr >> 15) & 0x800) |
928088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((instr >> 4) & 0xf000);
928188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // MOVT{<c>}{<q>} <Rd>, #<imm16> ; T1
928288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      movt(CurrentCond(), Register(rd), imm);
928388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
928488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
928588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x03000000: {
928688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf3000000
928788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
928888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = (instr & 0x1f) + 1;
928988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
929088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t amount =
929188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
9292d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                      // SSAT{<c>}{<q>} <Rd>, #<imm>, <Rn> {, LSL #<amount> } ; T1 NOLINT(whitespace/line_length)
929388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      ssat(CurrentCond(),
929488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
929588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           imm,
929688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Operand(Register(rn), LSL, amount));
929788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff08020) != 0xf3000000)) {
929888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableT32(instr);
929988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
930088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
930188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
930288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x03200000: {
930388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf3200000
930488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070c0) {
930588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
930688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf3200000
930788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
930888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = (instr & 0xf) + 1;
930988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
931088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SSAT16{<c>}{<q>} <Rd>, #<imm>, <Rn> ; T1
931188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ssat16(CurrentCond(),
931288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
931388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 imm,
931488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn));
931588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xf3200000)) {
931688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
931788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
931888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
931988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
932088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
932188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70c0) == 0x0)) {
932288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
932388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
932488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
932588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
932688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = (instr & 0x1f) + 1;
932788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
932888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t amount =
932988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
9330d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // SSAT{<c>}{<q>} <Rd>, #<imm>, <Rn>, ASR #<amount> ; T1 NOLINT(whitespace/line_length)
933188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ssat(CurrentCond(),
933288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
933388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               imm,
933488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rn), ASR, amount));
933588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff08020) != 0xf3200000)) {
933688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
933788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
933888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
933988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
934088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
934188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
934288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
934388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x03400000: {
934488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf3400000
934588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
934688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
934788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t lsb =
934888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
934988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t widthm1 = instr & 0x1f;
935088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t width = widthm1 + 1;
935188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SBFX{<c>}{<q>} <Rd>, <Rn>, #<lsb>, #<width> ; T1
935288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sbfx(CurrentCond(),
935388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
935488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
935588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           lsb,
935688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           width);
935788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff08020) != 0xf3400000)) {
935888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableT32(instr);
935988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
936088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
936188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
936288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x03600000: {
936388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf3600000
936488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
936588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
936688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf36f0000
936788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
936888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t lsb =
936988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
937088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t msb = instr & 0x1f;
937188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t width = msb - lsb + 1;
937288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // BFC{<c>}{<q>} <Rd>, #<lsb>, #<width> ; T1
937388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          bfc(CurrentCond(), Register(rd), lsb, width);
937488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xffff8020) != 0xf36f0000)) {
937588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
937688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
937788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
937888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
937988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
938088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
938188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
938288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
938388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
938488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
938588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
938688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t lsb =
938788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
938888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t msb = instr & 0x1f;
938988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t width = msb - lsb + 1;
939088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // BFI{<c>}{<q>} <Rd>, <Rn>, #<lsb>, #<width> ; T1
939188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          bfi(CurrentCond(),
939288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
939388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
939488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              lsb,
939588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              width);
939688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff08020) != 0xf3600000)) {
939788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
939888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
939988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
940088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
940188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
940288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
940388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
940488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x03800000: {
940588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf3800000
940688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
940788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t imm = instr & 0x1f;
940888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
940988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t amount =
941088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
9411d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                      // USAT{<c>}{<q>} <Rd>, #<imm>, <Rn> {, LSL #<amount> } ; T1 NOLINT(whitespace/line_length)
941288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      usat(CurrentCond(),
941388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
941488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           imm,
941588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Operand(Register(rn), LSL, amount));
941688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff08020) != 0xf3800000)) {
941788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableT32(instr);
941888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
941988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
942088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
942188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x03a00000: {
942288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf3a00000
942388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070c0) {
942488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
942588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf3a00000
942688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
942788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = instr & 0xf;
942888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
942988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // USAT16{<c>}{<q>} <Rd>, #<imm>, <Rn> ; T1
943088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          usat16(CurrentCond(),
943188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
943288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 imm,
943388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn));
943488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xf3a00000)) {
943588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
943688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
943788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
943888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
943988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
944088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70c0) == 0x0)) {
944188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
944288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
944388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
944488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
944588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = instr & 0x1f;
944688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
944788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t amount =
944888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
9449d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // USAT{<c>}{<q>} <Rd>, #<imm>, <Rn>, ASR #<amount> ; T1 NOLINT(whitespace/line_length)
945088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          usat(CurrentCond(),
945188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
945288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               imm,
945388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rn), ASR, amount));
945488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff08020) != 0xf3a00000)) {
945588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
945688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
945788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
945888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
945988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
946088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
946188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
946288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x03c00000: {
946388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf3c00000
946488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
946588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
946688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t lsb =
946788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
946888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t widthm1 = instr & 0x1f;
946988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t width = widthm1 + 1;
947088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UBFX{<c>}{<q>} <Rd>, <Rn>, #<lsb>, #<width> ; T1
947188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      ubfx(CurrentCond(),
947288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
947388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
947488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           lsb,
947588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           width);
947688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff08020) != 0xf3c00000)) {
947788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableT32(instr);
947888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
947988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
948088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
94814339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
948288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
948388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
948488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
948588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
948688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
948788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00008000: {
948888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xf0008000
948988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00005000) {
949088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
949188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0008000
949288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x03800000) {
949388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x03800000: {
949488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf3808000
949588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x04600000) {
949688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
949788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf3808000
949888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000020) {
949988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
950088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf3808000
950188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned spec_reg = ((instr >> 8) & 0xf) |
950288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 16) & 0x10);
950388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
950488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // MSR{<c>}{<q>} <spec_reg>, <Rn> ; T1
950588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  msr(CurrentCond(),
950688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      MaskedSpecialRegister(spec_reg),
950788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rn));
950888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffe0f0ff) != 0xf3808000)) {
950988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
951088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
951188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
951288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
951388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000020: {
951488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf3808020
951588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnimplementedT32_32("MSR", instr);
951688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
951788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
951888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
951988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
952088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
952188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
952288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf3a08000
952388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00100000) {
952488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
952588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf3a08000
952688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000700) {
952788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
952888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3a08000
952988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x000000f0) {
953088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
953188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf3a08000
953288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x0000000f) {
953388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
953488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xf3a08000
953588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // NOP{<c>}.W ; T2
953688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              nop(CurrentCond(), Wide);
953788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0xffffffff) !=
953888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0xf3af8000)) {
953988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnpredictableT32(instr);
954088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
954188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
954288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
954388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000001: {
954488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xf3a08001
954588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // YIELD{<c>}.W ; T2
954688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              yield(CurrentCond(), Wide);
954788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0xffffffff) !=
954888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0xf3af8001)) {
954988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnpredictableT32(instr);
955088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
955188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
955288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
955388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000002: {
955488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xf3a08002
955588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("WFE", instr);
955688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
955788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
955888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000003: {
955988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xf3a08003
956088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("WFI", instr);
956188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
956288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
956388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000004: {
956488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xf3a08004
956588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("SEV", instr);
956688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
956788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
956888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000005: {
956988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xf3a08005
957088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("SEVL",
957188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  instr);
957288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
957388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
95744339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                            default:
957588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
957688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
957788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
957888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
957988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
958088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000000f0: {
958188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf3a080f0
958288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnimplementedT32_32("DBG", instr);
958388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
958488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
95854339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                        default:
958688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
958788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
958888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
958988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
959088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
959188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
959288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3a08100
959388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x000000e0) == 0x00000000) {
959488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnimplementedT32_32("CPS", instr);
959588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
959688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
959788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
959888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
959988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
960088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000400: {
960188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3a08400
960288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x0000001f) == 0x00000000) {
960388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnimplementedT32_32("CPSIE", instr);
960488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
960588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
960688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
960788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
960888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
960988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000500: {
961088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3a08500
961188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnimplementedT32_32("CPSIE", instr);
961288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
961388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
961488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000600: {
961588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3a08600
961688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x0000001f) == 0x00000000) {
961788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnimplementedT32_32("CPSID", instr);
961888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
961988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
962088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
962188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
962288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
962388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000700: {
962488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3a08700
962588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnimplementedT32_32("CPSID", instr);
962688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
962788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
96284339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
962988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
963088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
963188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
963288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
963388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
963488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00100000: {
963588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf3b08000
963688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x000000f0) {
963788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000020: {
963888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3b08020
963988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // CLREX{<c>}{<q>} ; T1
964088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      clrex(CurrentCond());
964188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xffffffff) !=
964288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xf3bf8f2f)) {
964388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
964488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
964588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
964688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
964788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000040: {
964888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3b08040
964988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      MemoryBarrier option(instr & 0xf);
965088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // DSB{<c>}{<q>} {<option>} ; T1
965188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dsb(CurrentCond(), option);
965288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xfffffff0) !=
965388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xf3bf8f40)) {
965488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
965588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
965688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
965788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
965888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000050: {
965988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3b08050
966088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      MemoryBarrier option(instr & 0xf);
966188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // DMB{<c>}{<q>} {<option>} ; T1
966288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dmb(CurrentCond(), option);
966388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xfffffff0) !=
966488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xf3bf8f50)) {
966588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
966688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
966788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
966888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
966988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000060: {
967088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3b08060
967188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      MemoryBarrier option(instr & 0xf);
967288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // ISB{<c>}{<q>} {<option>} ; T1
967388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      isb(CurrentCond(), option);
967488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xfffffff0) !=
967588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xf3bf8f60)) {
967688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
967788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
967888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
967988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
96804339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
968188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
968288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
968388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
968488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
968588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
968688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
968788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
968888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
968988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00400000: {
969088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf3c08000
969188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00100000) {
969288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
969388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf3c08000
969488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = (instr >> 16) & 0xf;
969588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // BXJ{<c>}{<q>} <Rm> ; T1
969688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  bxj(CurrentCond(), Register(rm));
969788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff0ffff) != 0xf3c08f00)) {
969888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
969988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
970088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
970188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
970288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00100000: {
970388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf3d08000
970488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x000000ff) {
970588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
970688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf3d08000
970788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x000f0000) == 0x000e0000) {
970888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnimplementedT32_32("ERET", instr);
970988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
971088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
971188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
971288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
971388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
971488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default: {
971588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xff) == 0x0)) {
971688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
971788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
971888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
971988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = instr & 0xff;
972088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // SUBS{<c>}{<q>} PC, LR, #<imm8> ; T5
972188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      subs(CurrentCond(), Best, pc, lr, imm);
972288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xffffff00) !=
972388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xf3de8f00)) {
972488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
972588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
972688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
972788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
972888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
972988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
973088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
973188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
973288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
973388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
973488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00600000: {
973588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf3e08000
973688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000020) {
973788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
973888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf3e08000
973988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
974088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned spec_reg = (instr >> 20) & 0x1;
974188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // MRS{<c>}{<q>} <Rd>, <spec_reg> ; T1
974288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  mrs(CurrentCond(),
974388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
974488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpecialRegister(spec_reg));
974588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffeff0ff) != 0xf3ef8000)) {
974688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
974788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
974888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
974988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
975088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000020: {
975188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf3e08020
975288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnimplementedT32_32("MRS", instr);
975388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
975488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
975588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
975688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
975788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
975888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x04000000: {
975988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf7808000
976088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x001f2fff) {
976188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000f0001: {
976288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf78f8001
976388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnimplementedT32_32("DCPS1", instr);
976488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
976588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
976688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000f0002: {
976788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf78f8002
976888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnimplementedT32_32("DCPS2", instr);
976988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
977088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
977188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000f0003: {
977288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf78f8003
977388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnimplementedT32_32("DCPS3", instr);
977488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
977588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
97764339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
977788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
977888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
977988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
978088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
978188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
978288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x04600000: {
978388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf7e08000
978488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00102000) {
978588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
978688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf7e08000
978788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
978888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (instr & 0xfff) | ((instr >> 4) & 0xf000);
978988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // HVC{<q>} {#}<imm16> ; T1
9790fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                  hvc(Condition::None(), imm);
979188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
979288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
979388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00100000: {
979488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf7f08000
979588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnimplementedT32_32("SMC", instr);
979688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
979788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
979888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00102000: {
979988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf7f0a000
980088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
980188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (instr & 0xfff) | ((instr >> 4) & 0xf000);
980288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((imm <= 255)) {
980388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // UDF{<c>}.W {#}<imm> ; T2
980488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    udf(CurrentCond(), Wide, imm);
980588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
980688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // UDF{<c>}{<q>} {#}<imm> ; T2
980788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    udf(CurrentCond(), Best, imm);
980888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
980988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
981088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
98114339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
981288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
981388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
981488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
981588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
981688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
98174339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
981888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
981988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
982088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
982188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
982288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
982388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
982488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x3800000) == 0x3800000)) {
982588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
982688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
982788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
982888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 22) & 0xf);
982988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t imm =
983088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SignExtend<int32_t>((instr & 0x7ff) |
983188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 5) & 0x1f800) |
983288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr << 4) & 0x20000) |
983388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr << 7) & 0x40000) |
983488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 7) & 0x80000),
983588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  20)
983688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              << 1;
983788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Label label(imm, kT32PcDelta);
983888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() && (imm >= -1048576) &&
983988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (imm <= 1048574) && ((imm & 1) == 0) &&
984088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((imm >= -256) && (imm <= 254) &&
984188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               ((imm & 1) == 0))) {
984288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // B<c>.W <label> ; T3
984388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            b(condition, Wide, &label);
984488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
984588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT(OutsideITBlock() && (imm >= -1048576) &&
984688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        (imm <= 1048574) && ((imm & 1) == 0));
984788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // B<c>{<q>} <label> ; T3
984888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            b(condition, Best, &label);
984988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
985088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
985188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
985288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
985388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
985488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
985588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00001000: {
985688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf0009000
985788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t encoded_imm =
985888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0x7ff) | ((instr >> 5) & 0x1ff800) |
985988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr << 10) & 0x200000) |
986088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr << 9) & 0x400000) | ((instr >> 3) & 0x800000);
986188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t S = encoded_imm & (1 << 23);
986288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      encoded_imm ^= ((S >> 1) | (S >> 2)) ^ (3 << 21);
986388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      int32_t imm = SignExtend<int32_t>(encoded_imm << 1, 25);
986488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Label label(imm, kT32PcDelta);
986588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((imm >= -16777216) && (imm <= 16777214) &&
986688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((imm & 1) == 0) &&
986788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (OutsideITBlockOrLast() && (imm >= -2048) &&
986888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           (imm <= 2046) && ((imm & 1) == 0))) {
986988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // B{<c>}.W <label> ; T4
987088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        b(CurrentCond(), Wide, &label);
987188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
987288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        VIXL_ASSERT(OutsideITBlockOrLast() &&
987388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (imm >= -16777216) && (imm <= 16777214) &&
987488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((imm & 1) == 0));
987588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // B{<c>}{<q>} <label> ; T4
987688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        b(CurrentCond(), Best, &label);
987788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
987888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
987988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
988088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00004000: {
988188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf000c000
988288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((instr & 0x00000001) == 0x00000000) {
988388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t encoded_imm = ((instr >> 1) & 0x3ff) |
988488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               ((instr >> 6) & 0xffc00) |
988588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               ((instr << 9) & 0x100000) |
988688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               ((instr << 8) & 0x200000) |
988788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               ((instr >> 4) & 0x400000);
988888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t S = encoded_imm & (1 << 22);
988988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        encoded_imm ^= ((S >> 1) | (S >> 2)) ^ (3 << 20);
989088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t imm = SignExtend<int32_t>(encoded_imm << 2, 25);
989188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Label label(imm, kT32PcDelta);
989288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // BLX{<c>}{<q>} <label> ; T2
989388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        blx(CurrentCond(), &label);
989488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
989588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
989688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
989788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
989888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
989988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00005000: {
990088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf000d000
990188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t encoded_imm =
990288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (instr & 0x7ff) | ((instr >> 5) & 0x1ff800) |
990388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr << 10) & 0x200000) |
990488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr << 9) & 0x400000) | ((instr >> 3) & 0x800000);
990588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t S = encoded_imm & (1 << 23);
990688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      encoded_imm ^= ((S >> 1) | (S >> 2)) ^ (3 << 21);
990788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      int32_t imm = SignExtend<int32_t>(encoded_imm << 1, 25);
990888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Label label(imm, kT32PcDelta);
990988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // BL{<c>}{<q>} <label> ; T1
991088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      bl(CurrentCond(), &label);
991188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
991288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
991388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
991488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
991588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
991688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
991788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
991888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
991988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
992088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
992188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
992288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        case 0x08000000: {
992388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          // 0xe8000000
992488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          switch (instr & 0x06000000) {
992588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x00000000: {
992688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xe8000000
992788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x10100000) {
992888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
992988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xe8000000
993088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x01400000) {
993188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
993288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xe8000000
993388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00800000) {
993488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
993588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe8000000
993688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("SRSDB", instr);
993788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
993888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
993988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800000: {
994088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe8800000
994188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
994288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back((instr >> 21) & 0x1);
994388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          RegisterList registers(
994488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((instr >> 14) & 0x1) << kLRRegNum) |
994588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x1fff));
994688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((rn < kNumberOfT32LowRegisters) &&
994788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              write_back.DoesWriteBack() &&
994888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((registers.GetList() & ~0xff) == 0)) {
994988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STM{<c>}.W <Rn>{!}, <registers> ; T2
995088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            stm(CurrentCond(),
995188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
995288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
995388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                write_back,
995488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                registers);
995588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xffd0a000) != 0xe8800000)) {
995688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
995788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
995888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
995988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STM{<c>}{<q>} <Rn>{!}, <registers> ; T2
996088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            stm(CurrentCond(),
996188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
996288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
996388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                write_back,
996488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                registers);
996588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xffd0a000) != 0xe8800000)) {
996688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
996788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
996888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
996988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
997088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
997188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
997288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
997388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
997488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
997588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xe8400000
997688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00200000) {
997788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
997888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe8400000
997988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00800000) {
998088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
998188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xe8400000
998288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
998388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
998488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
998588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = (instr & 0xff) << 2;
9986d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // STREX{<c>}{<q>} <Rd>, <Rt>, [<Rn>{, #<imm>}] ; T1 NOLINT(whitespace/line_length)
998788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              strex(CurrentCond(),
998888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
998988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rt),
999088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    MemOperand(Register(rn),
999188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               plus,
999288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               offset,
999388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Offset));
999488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
999588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
999688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800000: {
999788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xe8c00000
999888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000000f0) {
999988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000040: {
1000088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c00040
1000188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = instr & 0xf;
1000288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1000388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1000488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // STREXB{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; T1
1000588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  strexb(CurrentCond(),
1000688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
1000788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1000888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1000988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00ff0) != 0xe8c00f40)) {
1001088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1001188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1001288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1001388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1001488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000050: {
1001588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c00050
1001688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = instr & 0xf;
1001788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1001888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1001988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // STREXH{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; T1
1002088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  strexh(CurrentCond(),
1002188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
1002288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1002388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1002488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00ff0) != 0xe8c00f50)) {
1002588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1002688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1002788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1002888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1002988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000070: {
1003088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c00070
1003188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = instr & 0xf;
1003288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1003388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt2 = (instr >> 8) & 0xf;
1003488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
10035d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // STREXD{<c>}{<q>} <Rd>, <Rt>, <Rt2>, [<Rn>] ; T1 NOLINT(whitespace/line_length)
1003688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  strexd(CurrentCond(),
1003788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
1003888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1003988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt2),
1004088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1004188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1004288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1004388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000080: {
1004488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c00080
1004588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1004688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1004788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // STLB{<c>}{<q>} <Rt>, [<Rn>] ; T1
1004888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  stlb(CurrentCond(),
1004988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
1005088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn), Offset));
1005188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8c00f8f)) {
1005288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1005388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1005488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1005588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1005688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000090: {
1005788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c00090
1005888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1005988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1006088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // STLH{<c>}{<q>} <Rt>, [<Rn>] ; T1
1006188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  stlh(CurrentCond(),
1006288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
1006388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn), Offset));
1006488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8c00f9f)) {
1006588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1006688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1006788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1006888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1006988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000a0: {
1007088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c000a0
1007188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1007288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1007388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // STL{<c>}{<q>} <Rt>, [<Rn>] ; T1
1007488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  stl(CurrentCond(),
1007588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rt),
1007688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      MemOperand(Register(rn), Offset));
1007788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8c00faf)) {
1007888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1007988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1008088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1008188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1008288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000c0: {
1008388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c000c0
1008488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = instr & 0xf;
1008588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1008688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1008788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // STLEXB{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; T1
1008888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  stlexb(CurrentCond(),
1008988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
1009088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1009188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1009288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00ff0) != 0xe8c00fc0)) {
1009388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1009488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1009588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1009688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1009788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000d0: {
1009888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c000d0
1009988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = instr & 0xf;
1010088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1010188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1010288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // STLEXH{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; T1
1010388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  stlexh(CurrentCond(),
1010488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
1010588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1010688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1010788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00ff0) != 0xe8c00fd0)) {
1010888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1010988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1011088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1011188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1011288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000e0: {
1011388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c000e0
1011488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = instr & 0xf;
1011588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1011688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1011788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // STLEX{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; T1
1011888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  stlex(CurrentCond(),
1011988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Register(rd),
1012088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Register(rt),
1012188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        MemOperand(Register(rn), Offset));
1012288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00ff0) != 0xe8c00fe0)) {
1012388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1012488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1012588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1012688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1012788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000f0: {
1012888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8c000f0
1012988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = instr & 0xf;
1013088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1013188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt2 = (instr >> 8) & 0xf;
1013288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
10133d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // STLEXD{<c>}{<q>} <Rd>, <Rt>, <Rt2>, [<Rn>] ; T1 NOLINT(whitespace/line_length)
1013488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  stlexd(CurrentCond(),
1013588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
1013688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1013788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt2),
1013888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1013988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1014088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
101414339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1014288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1014388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1014488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1014588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1014688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1014788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1014888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1014988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1015088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00200000: {
1015188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe8600000
1015288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1015388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1015488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1015588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1015688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1015788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt2 = (instr >> 8) & 0xf;
1015888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1015988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 23) & 0x1) == 0) ? minus
1016088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 : plus);
1016188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = (instr & 0xff) << 2;
10162d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>], #{+/-}<imm> ; T1 NOLINT(whitespace/line_length)
1016388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strd(CurrentCond(),
1016488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1016588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt2),
1016688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn),
1016788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          sign,
1016888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          offset,
1016988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          PostIndex));
1017088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1017188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1017288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1017388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1017488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1017588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01000000: {
1017688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xe9000000
1017788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00800000) {
1017888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1017988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe9000000
1018088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((Uint32((instr >> 21)) & Uint32(0x1)) ==
1018188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Uint32(0x1)) &&
1018288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((Uint32((instr >> 16)) & Uint32(0xf)) ==
1018388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Uint32(0xd)) &&
1018488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (BitCount(((Uint32((instr >> 14)) & Uint32(0x1))
1018588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         << 13) |
1018688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        (Uint32(instr) & Uint32(0x1fff))) >
1018782af61c481f2d54e5718320a32af9ad933e0bf7dPierre Langlois                               Int64(1))) {
1018888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            RegisterList registers(
1018988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (((instr >> 14) & 0x1) << kLRRegNum) |
1019088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0x1fff));
1019188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (registers.IsR0toR7orLR()) {
1019288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // PUSH{<c>}.W <registers> ; T1
1019388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              push(CurrentCond(), Wide, registers);
1019488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xffffa000) != 0xe92d0000)) {
1019588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1019688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1019788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
1019888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // PUSH{<c>}{<q>} <registers> ; T1
1019988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              push(CurrentCond(), Best, registers);
1020088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xffffa000) != 0xe92d0000)) {
1020188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1020288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1020388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1020488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1020588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1020688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1020788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back((instr >> 21) & 0x1);
1020888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          RegisterList registers(
1020988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((instr >> 14) & 0x1) << kLRRegNum) |
1021088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x1fff));
1021188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STMDB{<c>}{<q>} <Rn>{!}, <registers> ; T1
1021288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          stmdb(CurrentCond(),
1021388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
1021488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1021588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                write_back,
1021688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                registers);
1021788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xffd0a000) != 0xe9000000)) {
1021888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1021988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1022088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1022188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1022288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800000: {
1022388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe9800000
1022488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("SRS{IA}", instr);
1022588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1022688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1022788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1022888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1022988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1023088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01400000: {
1023188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xe9400000
1023288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00200000) {
1023388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1023488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe9400000
1023588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1023688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1023788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1023888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1023988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1024088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt2 = (instr >> 8) & 0xf;
1024188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1024288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 23) & 0x1) == 0) ? minus
1024388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 : plus);
1024488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = (instr & 0xff) << 2;
10245d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>{, #{+/-}<imm>}] ; T1 NOLINT(whitespace/line_length)
1024688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strd(CurrentCond(),
1024788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1024888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt2),
1024988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn), sign, offset, Offset));
1025088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1025188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1025288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00200000: {
1025388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe9600000
1025488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1025588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1025688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1025788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1025888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1025988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt2 = (instr >> 8) & 0xf;
1026088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1026188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 23) & 0x1) == 0) ? minus
1026288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 : plus);
1026388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = (instr & 0xff) << 2;
10264d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>{, #{+/-}<imm>}]! ; T1 NOLINT(whitespace/line_length)
1026588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strd(CurrentCond(),
1026688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1026788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt2),
1026888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn),
1026988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          sign,
1027088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          offset,
1027188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          PreIndex));
1027288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1027388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1027488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1027588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1027688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1027788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1027888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1027988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1028088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00100000: {
1028188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xe8100000
1028288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00400000) {
1028388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1028488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xe8100000
1028588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x01800000) {
1028688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1028788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe8100000
1028888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("RFEDB", instr);
1028988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1029088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1029188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800000: {
1029288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe8900000
1029388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((Uint32((instr >> 21)) & Uint32(0x1)) ==
1029488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Uint32(0x1)) &&
1029588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((Uint32((instr >> 16)) & Uint32(0xf)) ==
1029688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Uint32(0xd)) &&
1029788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (BitCount(((Uint32((instr >> 15)) & Uint32(0x1))
1029888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         << 14) |
1029988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((Uint32((instr >> 14)) & Uint32(0x1))
1030088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         << 13) |
1030188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        (Uint32(instr) & Uint32(0x1fff))) >
1030282af61c481f2d54e5718320a32af9ad933e0bf7dPierre Langlois                               Int64(1))) {
1030388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            RegisterList registers(
1030488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (((instr >> 15) & 0x1) << kPCRegNum) |
1030588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (((instr >> 14) & 0x1) << kLRRegNum) |
1030688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0x1fff));
1030788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (registers.IsR0toR7orPC()) {
1030888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // POP{<c>}.W <registers> ; T2
1030988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              pop(CurrentCond(), Wide, registers);
1031088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xffff2000) != 0xe8bd0000)) {
1031188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1031288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1031388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
1031488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // POP{<c>}{<q>} <registers> ; T2
1031588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              pop(CurrentCond(), Best, registers);
1031688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xffff2000) != 0xe8bd0000)) {
1031788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1031888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1031988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1032088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1032188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1032288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1032388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back((instr >> 21) & 0x1);
1032488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          RegisterList registers(
1032588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((instr >> 15) & 0x1) << kPCRegNum) |
1032688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((instr >> 14) & 0x1) << kLRRegNum) |
1032788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x1fff));
1032888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((rn < kNumberOfT32LowRegisters) &&
1032988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((registers.GetList() & (1 << rn)) == 0) ==
1033088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               write_back.DoesWriteBack()) &&
1033188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((registers.GetList() & ~0xff) == 0)) {
1033288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDM{<c>}.W <Rn>{!}, <registers> ; T2
1033388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldm(CurrentCond(),
1033488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
1033588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1033688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                write_back,
1033788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                registers);
1033888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xffd02000) != 0xe8900000)) {
1033988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1034088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1034188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1034288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDM{<c>}{<q>} <Rn>{!}, <registers> ; T2
1034388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldm(CurrentCond(),
1034488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
1034588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1034688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                write_back,
1034788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                registers);
1034888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xffd02000) != 0xe8900000)) {
1034988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1035088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1035188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1035288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1035388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1035488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x01000000: {
1035588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe9100000
1035688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1035788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back((instr >> 21) & 0x1);
1035888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          RegisterList registers(
1035988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((instr >> 15) & 0x1) << kPCRegNum) |
1036088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (((instr >> 14) & 0x1) << kLRRegNum) |
1036188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x1fff));
1036288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // LDMDB{<c>}{<q>} <Rn>{!}, <registers> ; T1
1036388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ldmdb(CurrentCond(),
1036488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1036588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                write_back,
1036688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                registers);
1036788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xffd02000) != 0xe9100000)) {
1036888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1036988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1037088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1037188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1037288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x01800000: {
1037388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe9900000
1037488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("RFE{IA}", instr);
1037588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1037688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1037788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1037888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1037988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1038088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
1038188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xe8500000
1038288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x01200000) {
1038388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1038488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe8500000
1038588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00800000) {
1038688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1038788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xe8500000
1038888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1038988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1039088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = (instr & 0xff) << 2;
1039188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // LDREX{<c>}{<q>} <Rt>, [<Rn>{, #<imm>}] ; T1
1039288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ldrex(CurrentCond(),
1039388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rt),
1039488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    MemOperand(Register(rn),
1039588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               plus,
1039688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               offset,
1039788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Offset));
1039888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff00f00) != 0xe8500f00)) {
1039988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1040088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1040188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1040288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1040388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800000: {
1040488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xe8d00000
1040588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000000f0) {
1040688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1040788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d00000
1040888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1040988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
1041088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // TBB{<c>}{<q>} [<Rn>, <Rm>] ; T1
1041188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  tbb(CurrentCond(),
1041288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rn),
1041388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rm));
1041488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff0fff0) != 0xe8d0f000)) {
1041588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1041688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1041788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1041888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1041988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000010: {
1042088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d00010
1042188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1042288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
1042388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // TBH{<c>}{<q>} [<Rn>, <Rm>, LSL #1] ; T1
1042488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  tbh(CurrentCond(),
1042588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rn),
1042688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rm));
1042788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff0fff0) != 0xe8d0f010)) {
1042888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1042988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1043088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1043188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1043288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000040: {
1043388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d00040
1043488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1043588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1043688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDREXB{<c>}{<q>} <Rt>, [<Rn>] ; T1
1043788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrexb(CurrentCond(),
1043888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1043988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1044088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8d00f4f)) {
1044188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1044288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1044388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1044488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1044588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000050: {
1044688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d00050
1044788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1044888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1044988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDREXH{<c>}{<q>} <Rt>, [<Rn>] ; T1
1045088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrexh(CurrentCond(),
1045188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1045288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1045388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8d00f5f)) {
1045488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1045588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1045688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1045788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1045888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000070: {
1045988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d00070
1046088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1046188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt2 = (instr >> 8) & 0xf;
1046288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1046388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDREXD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>] ; T1
1046488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrexd(CurrentCond(),
1046588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1046688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt2),
1046788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1046888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff000ff) != 0xe8d0007f)) {
1046988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1047088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1047188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1047288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1047388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000080: {
1047488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d00080
1047588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1047688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1047788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDAB{<c>}{<q>} <Rt>, [<Rn>] ; T1
1047888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldab(CurrentCond(),
1047988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
1048088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn), Offset));
1048188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8d00f8f)) {
1048288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1048388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1048488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1048588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1048688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000090: {
1048788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d00090
1048888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1048988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1049088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDAH{<c>}{<q>} <Rt>, [<Rn>] ; T1
1049188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldah(CurrentCond(),
1049288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
1049388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn), Offset));
1049488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8d00f9f)) {
1049588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1049688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1049788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1049888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1049988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000a0: {
1050088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d000a0
1050188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1050288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1050388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDA{<c>}{<q>} <Rt>, [<Rn>] ; T1
1050488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  lda(CurrentCond(),
1050588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rt),
1050688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      MemOperand(Register(rn), Offset));
1050788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8d00faf)) {
1050888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1050988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1051088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1051188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1051288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000c0: {
1051388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d000c0
1051488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1051588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1051688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDAEXB{<c>}{<q>} <Rt>, [<Rn>] ; T1
1051788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldaexb(CurrentCond(),
1051888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1051988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1052088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8d00fcf)) {
1052188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1052288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1052388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1052488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1052588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000d0: {
1052688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d000d0
1052788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1052888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1052988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDAEXH{<c>}{<q>} <Rt>, [<Rn>] ; T1
1053088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldaexh(CurrentCond(),
1053188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1053288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1053388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8d00fdf)) {
1053488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1053588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1053688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1053788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1053888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000e0: {
1053988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d000e0
1054088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1054188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1054288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDAEX{<c>}{<q>} <Rt>, [<Rn>] ; T1
1054388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldaex(CurrentCond(),
1054488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Register(rt),
1054588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        MemOperand(Register(rn), Offset));
1054688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00fff) != 0xe8d00fef)) {
1054788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1054888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1054988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1055088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1055188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000000f0: {
1055288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xe8d000f0
1055388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1055488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt2 = (instr >> 8) & 0xf;
1055588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1055688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDAEXD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>] ; T1
1055788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldaexd(CurrentCond(),
1055888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1055988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt2),
1056088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
1056188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff000ff) != 0xe8d000ff)) {
1056288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1056388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1056488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1056588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
105664339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1056788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1056888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1056988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1057088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1057188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1057288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1057388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1057488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1057588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00200000: {
1057688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe8700000
1057788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
1057888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
1057988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xe87f0000
1058088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x1200000) == 0x0)) {
1058188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1058288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1058388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1058488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1058588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt2 = (instr >> 8) & 0xf;
1058688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t U = (instr >> 23) & 0x1;
1058788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t imm = instr & 0xff;
1058888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              imm <<= 2;
1058988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (U == 0) imm = -imm;
1059088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              bool minus_zero = (imm == 0) && (U == 0);
1059188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Label label(imm, kT32PcDelta, minus_zero);
1059288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // LDRD{<c>}{<q>} <Rt>, <Rt2>, <label> ; T1
1059388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ldrd(CurrentCond(),
1059488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1059588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt2),
1059688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   &label);
1059788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xff7f0000) != 0xe95f0000)) {
1059888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1059988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1060088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1060188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1060288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1060388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1060488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1060588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1060688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1060788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1060888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt2 = (instr >> 8) & 0xf;
1060988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1061088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Sign sign((((instr >> 23) & 0x1) == 0) ? minus
1061188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     : plus);
1061288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = (instr & 0xff) << 2;
10613d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>], #{+/-}<imm> ; T1 NOLINT(whitespace/line_length)
1061488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ldrd(CurrentCond(),
1061588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1061688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt2),
1061788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1061888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
1061988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              offset,
1062088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              PostIndex));
1062188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1062288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1062388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1062488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1062588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1062688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x01000000: {
1062788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe9500000
1062888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
1062988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
1063088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xe95f0000
1063188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x1200000) == 0x0)) {
1063288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1063388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1063488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1063588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1063688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt2 = (instr >> 8) & 0xf;
1063788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t U = (instr >> 23) & 0x1;
1063888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t imm = instr & 0xff;
1063988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              imm <<= 2;
1064088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (U == 0) imm = -imm;
1064188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              bool minus_zero = (imm == 0) && (U == 0);
1064288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Label label(imm, kT32PcDelta, minus_zero);
1064388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // LDRD{<c>}{<q>} <Rt>, <Rt2>, <label> ; T1
1064488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ldrd(CurrentCond(),
1064588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1064688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt2),
1064788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   &label);
1064888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xff7f0000) != 0xe95f0000)) {
1064988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1065088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1065188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1065288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1065388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1065488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1065588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1065688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1065788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1065888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1065988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt2 = (instr >> 8) & 0xf;
1066088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1066188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Sign sign((((instr >> 23) & 0x1) == 0) ? minus
1066288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     : plus);
1066388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = (instr & 0xff) << 2;
10664d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>{, #{+/-}<imm>}] ; T1 NOLINT(whitespace/line_length)
1066588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ldrd(CurrentCond(),
1066688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1066788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt2),
1066888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1066988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
1067088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              offset,
1067188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Offset));
1067288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1067388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1067488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1067588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1067688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1067788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x01200000: {
1067888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xe9700000
1067988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
1068088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
1068188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xe97f0000
1068288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x1200000) == 0x0)) {
1068388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1068488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1068588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1068688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1068788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt2 = (instr >> 8) & 0xf;
1068888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t U = (instr >> 23) & 0x1;
1068988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t imm = instr & 0xff;
1069088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              imm <<= 2;
1069188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (U == 0) imm = -imm;
1069288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              bool minus_zero = (imm == 0) && (U == 0);
1069388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Label label(imm, kT32PcDelta, minus_zero);
1069488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // LDRD{<c>}{<q>} <Rt>, <Rt2>, <label> ; T1
1069588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ldrd(CurrentCond(),
1069688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1069788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt2),
1069888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   &label);
1069988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xff7f0000) != 0xe95f0000)) {
1070088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1070188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1070288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1070388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1070488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1070588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1070688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1070788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1070888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1070988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1071088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt2 = (instr >> 8) & 0xf;
1071188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1071288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Sign sign((((instr >> 23) & 0x1) == 0) ? minus
1071388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     : plus);
1071488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = (instr & 0xff) << 2;
10715d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>{, #{+/-}<imm>}]! ; T1 NOLINT(whitespace/line_length)
1071688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ldrd(CurrentCond(),
1071788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1071888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt2),
1071988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1072088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
1072188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              offset,
1072288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              PreIndex));
1072388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1072488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1072588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1072688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1072788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1072888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1072988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1073088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1073188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1073288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1073388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1073488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x10000000: {
1073588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xf8000000
1073688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x01a00000) {
1073788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1073888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf8000000
1073988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00400d00) {
1074088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1074188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8000000
1074288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x000002c0) == 0x00000000) {
1074388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000) == 0xf0000)) {
1074488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1074588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
1074688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1074788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
1074888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
1074988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign(plus);
1075088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
1075188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Shift shift = LSL;
1075288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t amount = (instr >> 4) & 0x3;
1075388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            AddrMode addrmode = Offset;
1075488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((rt < kNumberOfT32LowRegisters) &&
1075588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (rn < kNumberOfT32LowRegisters) &&
1075688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (rm < kNumberOfT32LowRegisters) &&
1075788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift.IsLSL() && (amount == 0) &&
1075888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign.IsPlus()) {
1075988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // STRB{<c>}.W <Rt>, [<Rn>, #{+}<Rm>] ; T2
1076088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              strb(CurrentCond(),
1076188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Wide,
1076288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1076388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1076488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
1076588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rm),
1076688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              addrmode));
1076788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
10768d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // STRB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>{, LSL #<imm>}] ; T2 NOLINT(whitespace/line_length)
1076988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              strb(CurrentCond(),
1077088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Best,
1077188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1077288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1077388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
1077488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rm),
1077588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              shift,
1077688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              amount,
1077788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              addrmode));
1077888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1077988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1078088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1078188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1078288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1078388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1078488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000900: {
1078588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8000900
1078688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1078788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1078888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1078988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1079088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1079188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1079288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 9) & 0x1) == 0) ? minus : plus);
1079388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = instr & 0xff;
1079488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STRB{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_2> ; T3
1079588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strb(CurrentCond(),
1079688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1079788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1079888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn),
1079988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          sign,
1080088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          offset,
1080188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          PostIndex));
1080288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1080388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1080488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000c00: {
1080588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8000c00
1080688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000200) {
1080788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1080888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8000c00
1080988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1081088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1081188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1081288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1081388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1081488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1081588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = instr & 0xff;
1081688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // STRB{<c>}{<q>} <Rt>, [<Rn>{, #-<imm_2>}] ; T3
1081788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              strb(CurrentCond(),
1081888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Best,
1081988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1082088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1082188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              minus,
1082288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              offset,
1082388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Offset));
1082488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1082588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1082688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000200: {
1082788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8000e00
1082888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1082988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1083088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1083188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1083288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("STRBT", instr);
1083388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1083488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1083588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1083688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1083788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1083888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000d00: {
1083988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8000d00
1084088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1084188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1084288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1084388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1084488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1084588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1084688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 9) & 0x1) == 0) ? minus : plus);
1084788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = instr & 0xff;
1084888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STRB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}]! ; T3
1084988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strb(CurrentCond(),
1085088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1085188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1085288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn),
1085388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          sign,
1085488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          offset,
1085588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          PreIndex));
1085688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1085788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1085888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400000: {
1085988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8400000
1086088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x000002c0) == 0x00000000) {
1086188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000) == 0xf0000)) {
1086288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1086388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
1086488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1086588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
1086688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
1086788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign(plus);
1086888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
1086988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Shift shift = LSL;
1087088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t amount = (instr >> 4) & 0x3;
1087188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            AddrMode addrmode = Offset;
1087288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((rt < kNumberOfT32LowRegisters) &&
1087388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (rn < kNumberOfT32LowRegisters) &&
1087488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (rm < kNumberOfT32LowRegisters) &&
1087588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift.IsLSL() && (amount == 0) &&
1087688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign.IsPlus()) {
1087788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // STR{<c>}.W <Rt>, [<Rn>, #{+}<Rm>] ; T2
1087888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              str(CurrentCond(),
1087988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Wide,
1088088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
1088188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
1088288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             sign,
1088388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             Register(rm),
1088488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             addrmode));
1088588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
10886d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // STR{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>{, LSL #<imm>}] ; T2 NOLINT(whitespace/line_length)
1088788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              str(CurrentCond(),
1088888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
1088988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
1089088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
1089188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             sign,
1089288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             Register(rm),
1089388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift,
1089488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             amount,
1089588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             addrmode));
1089688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1089788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1089888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1089988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1090088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1090188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1090288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400900: {
1090388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8400900
1090488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1090588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1090688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1090788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1090888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1090988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1091088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 9) & 0x1) == 0) ? minus : plus);
1091188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = instr & 0xff;
1091288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STR{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_2> ; T4
1091388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          str(CurrentCond(),
1091488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
1091588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rt),
1091688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              MemOperand(Register(rn),
1091788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         sign,
1091888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         offset,
1091988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         PostIndex));
1092088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1092188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1092288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400c00: {
1092388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8400c00
1092488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000200) {
1092588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1092688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8400c00
1092788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1092888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1092988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1093088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1093188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1093288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1093388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = instr & 0xff;
1093488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // STR{<c>}{<q>} <Rt>, [<Rn>{, #-<imm_2>}] ; T4
1093588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              str(CurrentCond(),
1093688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
1093788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
1093888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
1093988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             minus,
1094088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             offset,
1094188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             Offset));
1094288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1094388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1094488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000200: {
1094588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8400e00
1094688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1094788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1094888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1094988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1095088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("STRT", instr);
1095188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1095288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1095388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1095488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1095588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1095688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400d00: {
1095788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8400d00
1095888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1095988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1096088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1096188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1096288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((Uint32((instr >> 16)) & Uint32(0xf)) ==
1096388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Uint32(0xd)) &&
1096488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((Uint32((instr >> 9)) & Uint32(0x1)) ==
1096588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Uint32(0x0)) &&
1096688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((Uint32(instr) & Uint32(0xff)) == Uint32(0x4))) {
1096788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
1096888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((rt <= 7) || (rt == kLRRegNum)) {
1096988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // PUSH{<c>}.W <single_register_list> ; T4
1097088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              push(CurrentCond(), Wide, Register(rt));
1097188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
1097288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // PUSH{<c>}{<q>} <single_register_list> ; T4
1097388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              push(CurrentCond(), Best, Register(rt));
1097488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1097588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1097688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1097788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1097888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1097988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 9) & 0x1) == 0) ? minus : plus);
1098088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = instr & 0xff;
1098188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STR{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}]! ; T4
1098288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          str(CurrentCond(),
1098388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
1098488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rt),
1098588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              MemOperand(Register(rn), sign, offset, PreIndex));
1098688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1098788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
109884339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                        default:
1098988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
1099088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1099188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1099288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1099388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1099488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
1099588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf8200000
1099688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00400d00) {
1099788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1099888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8200000
1099988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x000002c0) == 0x00000000) {
1100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000) == 0xf0000)) {
1100188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
1100388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1100488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
1100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
1100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign(plus);
1100788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
1100888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Shift shift = LSL;
1100988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t amount = (instr >> 4) & 0x3;
1101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            AddrMode addrmode = Offset;
1101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((rt < kNumberOfT32LowRegisters) &&
1101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (rn < kNumberOfT32LowRegisters) &&
1101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (rm < kNumberOfT32LowRegisters) &&
1101488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift.IsLSL() && (amount == 0) &&
1101588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign.IsPlus()) {
1101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // STRH{<c>}.W <Rt>, [<Rn>, #{+}<Rm>] ; T2
1101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              strh(CurrentCond(),
1101888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Wide,
1101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1102188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
1102288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rm),
1102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              addrmode));
1102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
11025d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // STRH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>{, LSL #<imm>}] ; T2 NOLINT(whitespace/line_length)
1102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              strh(CurrentCond(),
1102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Best,
1102888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1102988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1103088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
1103188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rm),
1103288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              shift,
1103388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              amount,
1103488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              addrmode));
1103588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1103688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1103788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1103888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1103988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1104088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1104188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000900: {
1104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8200900
1104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1104688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1104788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 9) & 0x1) == 0) ? minus : plus);
1105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = instr & 0xff;
1105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STRH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_2> ; T3
1105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strh(CurrentCond(),
1105388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1105488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1105588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn),
1105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          sign,
1105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          offset,
1105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          PostIndex));
1105988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1106088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1106188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000c00: {
1106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8200c00
1106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000200) {
1106488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8200c00
1106688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1106788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1106888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1106988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1107088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1107188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1107288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = instr & 0xff;
1107388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // STRH{<c>}{<q>} <Rt>, [<Rn>{, #-<imm_2>}] ; T3
1107488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              strh(CurrentCond(),
1107588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Best,
1107688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
1107788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
1107888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              minus,
1107988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              offset,
1108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Offset));
1108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1108388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000200: {
1108488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8200e00
1108588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1108888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("STRHT", instr);
1109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1109588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000d00: {
1109688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8200d00
1109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1109988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1110088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1110188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1110288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1110388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Sign sign((((instr >> 9) & 0x1) == 0) ? minus : plus);
1110488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = instr & 0xff;
1110588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STRH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}]! ; T3
1110688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strh(CurrentCond(),
1110788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1110888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1110988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn),
1111088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          sign,
1111188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          offset,
1111288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          PreIndex));
1111388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1111488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
111154339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                        default:
1111688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
1111788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1111888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1111988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1112088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1112188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00800000: {
1112288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf8800000
1112388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00400000) {
1112488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1112588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8800000
1112688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1112788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1112888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1113188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1113288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = instr & 0xfff;
1113388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((rt < kNumberOfT32LowRegisters) &&
1113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (rn < kNumberOfT32LowRegisters) &&
1113588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((offset >= 0) && (offset <= 31))) {
1113688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STRB{<c>}.W <Rt>, [<Rn>{, #{+}<imm_1>}] ; T2
1113788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            strb(CurrentCond(),
1113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
1113988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
1114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
1114188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            plus,
1114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
1114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Offset));
1114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1114588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STRB{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm_1>}] ; T2
1114688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            strb(CurrentCond(),
1114788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
1114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
1114988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
1115088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            plus,
1115188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
1115288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Offset));
1115388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1115488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1115588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1115688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400000: {
1115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8c00000
1115888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000)) {
1115988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1116088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1116188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rt = (instr >> 12) & 0xf;
1116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          int32_t offset = instr & 0xfff;
1116588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((rt < kNumberOfT32LowRegisters) &&
1116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rn < kNumberOfT32LowRegisters) &&
1116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               ((offset >= 0) && (offset <= 124) &&
1116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((offset & 3) == 0))) ||
1116988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rt < kNumberOfT32LowRegisters) &&
1117088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rn == sp.GetCode()) &&
1117188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               ((offset >= 0) && (offset <= 1020) &&
1117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((offset & 3) == 0)))) {
1117388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STR{<c>}.W <Rt>, [<Rn>{, #{+}<imm_1>}] ; T3
1117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            str(CurrentCond(),
1117588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
1117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rt),
1117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                MemOperand(Register(rn), plus, offset, Offset));
1117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1117988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STR{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm_1>}] ; T3
1118088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            str(CurrentCond(),
1118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
1118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rt),
1118388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                MemOperand(Register(rn), plus, offset, Offset));
1118488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1118588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1118688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1118788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1118888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1118988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1119088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00a00000: {
1119188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf8a00000
1119288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((instr & 0x00400000) == 0x00000000) {
1119388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000) == 0xf0000)) {
1119488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
1119588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
1119688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1119788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
1119888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
1119988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = instr & 0xfff;
1120088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((rt < kNumberOfT32LowRegisters) &&
1120188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (rn < kNumberOfT32LowRegisters) &&
1120288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((offset >= 0) && (offset <= 62) &&
1120388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             ((offset & 1) == 0))) {
1120488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STRH{<c>}.W <Rt>, [<Rn>{, #{+}<imm_1>}] ; T2
1120588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strh(CurrentCond(),
1120688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Wide,
1120788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1120888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn), plus, offset, Offset));
1120988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
1121088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // STRH{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm_1>}] ; T2
1121188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          strh(CurrentCond(),
1121288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1121388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
1121488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn), plus, offset, Offset));
1121588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1121688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
1121788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
1121888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1121988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1122088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1122188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01000000: {
1122288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf9000000
1122388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000000d) {
1122488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000000d: {
1122588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf900000d
1122688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000002) {
1122788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1122888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf900000d
1122988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000f00) {
1123088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1123188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900000d
1123288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1123388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1123488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1123588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1123688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1123788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1123888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1123988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_4_Decode((instr >> 4) & 0x3);
1124088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1124188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1124288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1124388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1124488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1124588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1124688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1124788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1124888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1124988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1125088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1125188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1125288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1125388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1125488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1125588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1125688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1125788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1125888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1125988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1126088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1126188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1126288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1126388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1126488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1126588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1126688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11267d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1126888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst4(CurrentCond(),
1126988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1127088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1127188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1127288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1127388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1127488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1127588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1127688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1127788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1127888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1127988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
1128088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900010d
1128188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1128288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1128388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1128488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1128588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1128688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1128788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1128888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_4_Decode((instr >> 4) & 0x3);
1128988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1129088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1129188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1129288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1129388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1129488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1129588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1129688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1129788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1129888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1129988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1130088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1130188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1130288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1130388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1130488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1130588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1130688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1130788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1130888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1130988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1131088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1131188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1131288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1131388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1131488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1131588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11316d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1131788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst4(CurrentCond(),
1131888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1131988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1132088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1132188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1132288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1132388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1132488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1132588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1132688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1132788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1132888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
1132988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900020d
1133088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1133188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1133288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1133388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1133488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1133588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1133688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1133788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1133888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1133988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1134088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1134188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1134288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_5_Decode((instr >> 4) & 0x3);
1134388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1134488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1134588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1134688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1134788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1134888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1134988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1135088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1135188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1135288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1135388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1135488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1135588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1135688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1135788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1135888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1135988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1136088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1136188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1136288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1136388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1136488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1136588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1136688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1136788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1136888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1136988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1137088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11371d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1137288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1137388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1137488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1137588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1137688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1137788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1137888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1137988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1138088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1138188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1138288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1138388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
1138488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900030d
1138588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1138688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1138788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1138888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1138988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1139088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1139188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1139288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1139388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1139488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1139588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1139688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1139788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1139888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1139988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1140088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1140188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1140288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1140388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1140488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1140588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1140688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1140788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1140888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1140988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1141088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1141188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1141288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1141388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1141488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1141588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1141688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1141788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1141888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1141988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1142088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1142188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1142288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1142388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1142488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1142588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1142688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1142788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11428d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1142988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst2(CurrentCond(),
1143088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1143188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1143288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1143388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1143488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1143588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1143688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1143788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1143888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1143988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1144088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000400: {
1144188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900040d
1144288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x20) == 0x20)) {
1144388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1144488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1144588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1144688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1144788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1144888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1144988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1145088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1145188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1145288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1145388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_3_Decode((instr >> 4) & 0x3);
1145488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1145588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1145688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1145788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1145888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1145988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1146088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1146188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1146288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1146388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1146488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1146588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1146688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x4:
1146788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1146888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1146988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1147088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
1147188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1147288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1147388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1147488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1147588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1147688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1147788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1147888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1147988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1148088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11481d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1148288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst3(CurrentCond(),
1148388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1148488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1148588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1148688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1148788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1148888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1148988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1149088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1149188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1149288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1149388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000500: {
1149488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900050d
1149588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x20) == 0x20)) {
1149688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1149788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1149888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1149988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1150088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1150188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1150288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1150388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1150488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1150588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1150688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_3_Decode((instr >> 4) & 0x3);
1150788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1150888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1150988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1151088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1151188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1151288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1151388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1151488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1151588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1151688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1151788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1151888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1151988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x4:
1152088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1152188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1152288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1152388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
1152488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1152588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1152688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1152788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1152888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1152988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1153088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1153188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1153288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1153388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11534d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1153588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst3(CurrentCond(),
1153688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1153788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1153888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1153988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1154088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1154188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1154288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1154388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1154488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1154588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1154688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000600: {
1154788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900060d
1154888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1154988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1155088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1155188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1155288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1155388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1155488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1155588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1155688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1155788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1155888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1155988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1156088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_5_Decode((instr >> 4) & 0x3);
1156188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1156288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1156388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1156488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1156588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1156688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1156788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1156888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1156988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1157088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1157188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1157288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1157388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1157488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1157588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1157688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1157788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1157888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1157988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1158088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1158188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1158288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1158388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1158488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1158588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1158688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1158788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1158888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11589d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1159088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1159188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1159288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1159388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1159488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1159588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1159688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1159788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1159888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1159988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1160088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1160188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000700: {
1160288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900070d
1160388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1160488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1160588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1160688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1160788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1160888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1160988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1161088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1161188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1161288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1161388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1161488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1161588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_5_Decode((instr >> 4) & 0x3);
1161688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1161788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1161888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1161988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1162088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1162188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1162288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1162388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1162488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1162588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1162688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1162788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1162888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1162988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1163088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1163188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1163288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1163388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1163488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1163588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1163688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1163788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1163888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1163988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1164088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1164188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1164288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1164388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11644d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1164588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1164688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1164788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1164888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1164988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1165088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1165188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1165288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1165388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1165488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1165588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1165688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000800: {
1165788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900080d
1165888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1165988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1166088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1166188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1166288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1166388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1166488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1166588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1166688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1166788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1166888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1166988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1167088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1167188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1167288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1167388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1167488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1167588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1167688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1167788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1167888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1167988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1168088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1168188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1168288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1168388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1168488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1168588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1168688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1168788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1168888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1168988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1169088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1169188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1169288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1169388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1169488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1169588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1169688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1169788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1169888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1169988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1170088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11701d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1170288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst2(CurrentCond(),
1170388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1170488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1170588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1170688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1170788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1170888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1170988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1171088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1171188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1171288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1171388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000900: {
1171488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900090d
1171588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1171688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1171788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1171888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1171988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1172088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1172188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1172288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1172388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1172488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1172588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1172688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1172788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1172888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1172988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1173088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1173188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1173288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1173388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1173488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1173588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1173688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1173788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1173888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1173988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1174088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1174188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1174288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1174388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1174488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1174588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1174688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1174788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1174888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1174988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1175088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1175188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1175288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1175388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1175488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1175588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1175688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1175788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11758d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1175988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst2(CurrentCond(),
1176088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1176188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1176288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1176388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1176488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1176588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1176688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1176788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1176888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1176988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1177088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000a00: {
1177188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9000a0d
1177288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1177388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1177488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1177588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1177688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1177788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1177888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1177988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1178088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1178188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1178288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1178388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1178488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_5_Decode((instr >> 4) & 0x3);
1178588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1178688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1178788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1178888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1178988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1179088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1179188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1179288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1179388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1179488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1179588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1179688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1179788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1179888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1179988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1180088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1180188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1180288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1180388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1180488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1180588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1180688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1180788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1180888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1180988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1181088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1181188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1181288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11813d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1181488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1181588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1181688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1181788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1181888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1181988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1182088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1182188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1182288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1182388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1182488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
118254339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1182688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1182788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1182888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1182988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1183088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1183188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000002: {
1183288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf900000f
1183388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000f00) {
1183488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1183588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900000d
1183688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1183788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1183888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1183988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1184088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1184188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1184288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1184388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_4_Decode((instr >> 4) & 0x3);
1184488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1184588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1184688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1184788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1184888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1184988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1185088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1185188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1185288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1185388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1185488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1185588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1185688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1185788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1185888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1185988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1186088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1186188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1186288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1186388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1186488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1186588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1186688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1186788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1186888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1186988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1187088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11871d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1187288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst4(CurrentCond(),
1187388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1187488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1187588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1187688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1187788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1187888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1187988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1188088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1188188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1188288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1188388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
1188488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900010d
1188588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1188688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1188788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1188888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1188988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1189088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1189188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1189288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_4_Decode((instr >> 4) & 0x3);
1189388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1189488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1189588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1189688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1189788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1189888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1189988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1190088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1190188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1190288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1190388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1190488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1190588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1190688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1190788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1190888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1190988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1191088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1191188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1191288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1191388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1191488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1191588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1191688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1191788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1191888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1191988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11920d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1192188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst4(CurrentCond(),
1192288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1192388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1192488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1192588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1192688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1192788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1192888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1192988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1193088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1193188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1193288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
1193388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900020d
1193488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1193588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1193688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1193788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1193888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1193988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1194088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1194188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1194288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1194388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1194488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1194588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1194688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_5_Decode((instr >> 4) & 0x3);
1194788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1194888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1194988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1195088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1195188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1195288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1195388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1195488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1195588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1195688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1195788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1195888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1195988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1196088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1196188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1196288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1196388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1196488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1196588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1196688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1196788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1196888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1196988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1197088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1197188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1197288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1197388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1197488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
11975d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1197688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1197788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1197888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1197988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1198088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1198188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1198288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1198388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1198488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1198588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1198688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1198788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
1198888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900030d
1198988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1199088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1199188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1199288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1199388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1199488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1199588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1199688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1199788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1199888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1199988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1200088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1200188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1200288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1200388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1200488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1200588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1200688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1200788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1200888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1200988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1201088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1201188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1201288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1201388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1201488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1201588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1201688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1201788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1201888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1201988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1202088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1202188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1202288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1202388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1202488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1202588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1202688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1202788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1202888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1202988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1203088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1203188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
12032d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1203388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst2(CurrentCond(),
1203488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1203588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1203688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1203788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1203888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1203988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1204088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1204188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1204288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1204388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1204488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000400: {
1204588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900040d
1204688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x20) == 0x20)) {
1204788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1204888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1204988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1205088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1205188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1205288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1205388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1205488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1205588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1205688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1205788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_3_Decode((instr >> 4) & 0x3);
1205888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1205988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1206088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1206188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1206288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1206388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1206488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1206588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1206688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1206788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1206888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1206988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1207088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x4:
1207188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1207288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1207388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1207488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
1207588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1207688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1207788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1207888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1207988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1208088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1208188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1208288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1208388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1208488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
12085d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1208688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst3(CurrentCond(),
1208788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1208888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1208988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1209088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1209188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1209288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1209388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1209488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1209588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1209688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1209788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000500: {
1209888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900050d
1209988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x20) == 0x20)) {
1210088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1210188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1210288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1210388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1210488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1210588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1210688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1210788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1210888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1210988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1211088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_3_Decode((instr >> 4) & 0x3);
1211188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1211288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1211388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1211488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1211588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1211688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1211788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1211888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1211988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1212088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1212188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1212288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1212388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x4:
1212488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1212588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1212688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1212788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
1212888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1212988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1213088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1213188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1213288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1213388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1213488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1213588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1213688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1213788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
12138d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1213988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst3(CurrentCond(),
1214088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1214188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1214288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1214388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1214488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1214588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1214688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1214788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1214888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1214988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1215088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000600: {
1215188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900060d
1215288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1215388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1215488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1215588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1215688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1215788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1215888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1215988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1216088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1216188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1216288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1216388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1216488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_5_Decode((instr >> 4) & 0x3);
1216588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1216688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1216788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1216888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1216988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1217088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1217188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1217288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1217388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1217488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1217588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1217688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1217788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1217888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1217988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1218088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1218188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1218288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1218388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1218488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1218588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1218688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1218788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1218888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1218988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1219088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1219188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1219288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
12193d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1219488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1219588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1219688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1219788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1219888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1219988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1220088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1220188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1220288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1220388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1220488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1220588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000700: {
1220688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900070d
1220788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1220888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1220988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1221088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1221188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1221288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1221388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1221488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1221588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1221688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1221788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1221888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1221988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_5_Decode((instr >> 4) & 0x3);
1222088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1222188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1222288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1222388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1222488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1222588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1222688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1222788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1222888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1222988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1223088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1223188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1223288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1223388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1223488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1223588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1223688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1223788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1223888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1223988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1224088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1224188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1224288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1224388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1224488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1224588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1224688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1224788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
12248d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1224988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1225088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1225188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1225288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1225388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1225488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1225588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1225688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1225788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1225888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1225988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1226088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000800: {
1226188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900080d
1226288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1226388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1226488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1226588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1226688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1226788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1226888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1226988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1227088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1227188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1227288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1227388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1227488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1227588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1227688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1227788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1227888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1227988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1228088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1228188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1228288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1228388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1228488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1228588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1228688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1228788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1228888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1228988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1229088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1229188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1229288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1229388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1229488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1229588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1229688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1229788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1229888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1229988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1230088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1230188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1230288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1230388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1230488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
12305d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1230688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst2(CurrentCond(),
1230788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1230888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1230988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1231088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1231188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1231288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1231388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1231488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1231588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1231688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1231788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000900: {
1231888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf900090d
1231988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1232088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1232188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1232288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1232388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1232488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1232588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1232688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1232788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1232888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1232988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1233088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1233188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1233288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1233388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1233488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1233588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1233688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1233788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1233888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1233988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1234088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1234188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1234288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1234388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1234488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1234588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1234688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1234788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1234888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1234988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1235088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1235188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1235288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1235388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1235488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1235588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1235688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1235788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1235888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1235988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1236088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1236188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
12362d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1236388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst2(CurrentCond(),
1236488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1236588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1236688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1236788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1236888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1236988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1237088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1237188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1237288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1237388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1237488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000a00: {
1237588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9000a0d
1237688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1237788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1237888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1237988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1238088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1238188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1238288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1238388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1238488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1238588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1238688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1238788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1238888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_5_Decode((instr >> 4) & 0x3);
1238988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1239088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1239188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1239288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1239388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1239488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1239588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1239688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1239788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1239888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1239988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1240088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1240188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1240288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1240388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1240488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1240588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1240688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1240788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1240888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1240988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1241088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1241188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1241288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1241388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1241488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1241588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1241688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
12417d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1241888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1241988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1242088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1242188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1242288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1242388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1242488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1242588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1242688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1242788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1242888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
124294339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1243088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1243188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1243288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1243388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1243488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1243588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1243688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1243788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1243888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1243988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000f00) {
1244088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1244188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000000
1244288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd)) {
1244388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1244488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1244588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1244688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1244788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1244888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1244988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1245088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1245188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1245288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1245388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_4_Decode((instr >> 4) & 0x3);
1245488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1245588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1245688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1245788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1245888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1245988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1246088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1246188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1246288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1246388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1246488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1246588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0:
1246688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1246788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1246888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1246988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x1:
1247088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1247188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1247288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1247388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1247488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1247588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1247688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1247788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1247888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1247988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12480d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1248188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst4(CurrentCond(),
1248288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1248388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1248488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1248588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1248688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1248788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1248888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1248988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1249088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1249188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1249288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1249388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
1249488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000100
1249588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd)) {
1249688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1249788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1249888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1249988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1250088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1250188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1250288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1250388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1250488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1250588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1250688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_4_Decode((instr >> 4) & 0x3);
1250788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1250888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1250988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1251088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1251188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1251288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1251388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1251488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1251588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1251688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1251788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1251888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0:
1251988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1252088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1252188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1252288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x1:
1252388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1252488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1252588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1252688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1252788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1252888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1252988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1253088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1253188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1253288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12533d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1253488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst4(CurrentCond(),
1253588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1253688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1253788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1253888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1253988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1254088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1254188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1254288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1254388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1254488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1254588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1254688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000200: {
1254788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000200
1254888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1254988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe20) == 0x620) ||
1255088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf30) == 0xa30)) {
1255188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1255288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1255388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1255488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1255588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_6_Decode((instr >> 6) & 0x3);
1255688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1255788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1255888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1255988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1256088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1256188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_5_Decode((instr >> 4) & 0x3);
1256288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1256388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1256488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1256588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1256688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1256788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1256888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1256988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing = kSingle;
1257088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1257188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1257288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1257388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x7:
1257488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 1;
1257588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1257688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0xa:
1257788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1257888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1257988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x6:
1258088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1258188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1258288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x2:
1258388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1258488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1258588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1258688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last = first + length - 1;
1258788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1258888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1258988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12590d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1259188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst1(CurrentCond(),
1259288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1259388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1259488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1259588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1259688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1259788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1259888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1259988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1260088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1260188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1260288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1260388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000300: {
1260488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000300
1260588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1260688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe30) == 0x830)) {
1260788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1260888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1260988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1261088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1261188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1261288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1261388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1261488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1261588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1261688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1261788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_2_Decode((instr >> 4) & 0x3);
1261888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1261988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1262088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1262188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1262288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1262388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1262488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1262588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1262688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1262788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1262888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1262988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x8:
1263088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1263188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1263288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1263388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x9:
1263488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1263588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1263688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1263788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x3:
1263888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1263988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1264088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1264188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1264288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1264388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1264488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1264588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1264688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1264788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12648d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1264988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst2(CurrentCond(),
1265088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1265188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1265288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1265388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1265488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1265588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1265688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1265788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1265888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1265988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1266088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1266188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000400: {
1266288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000400
1266388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1266488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x20) == 0x20)) {
1266588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1266688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1266788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1266888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1266988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1267088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1267188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1267288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1267388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1267488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1267588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_3_Decode((instr >> 4) & 0x3);
1267688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1267788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1267888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1267988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1268088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1268188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1268288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1268388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1268488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1268588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1268688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1268788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x4:
1268888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1268988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1269088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1269188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x5:
1269288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1269388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1269488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1269588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1269688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1269788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1269888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1269988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1270088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1270188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12702d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1270388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst3(CurrentCond(),
1270488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1270588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1270688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1270788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1270888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1270988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1271088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1271188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1271288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1271388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1271488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1271588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000500: {
1271688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000500
1271788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1271888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x20) == 0x20)) {
1271988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1272088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1272188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1272288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1272388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1272488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1272588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1272688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1272788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1272888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1272988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_3_Decode((instr >> 4) & 0x3);
1273088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1273188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1273288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1273388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1273488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1273588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1273688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1273788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1273888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1273988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1274088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1274188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x4:
1274288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1274388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1274488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1274588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x5:
1274688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1274788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1274888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1274988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1275088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1275188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1275288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1275388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1275488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1275588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12756d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1275788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst3(CurrentCond(),
1275888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1275988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1276088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1276188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1276288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1276388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1276488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1276588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1276688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1276788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1276888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1276988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000600: {
1277088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000600
1277188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1277288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe20) == 0x620) ||
1277388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf30) == 0xa30)) {
1277488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1277588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1277688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1277788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1277888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_6_Decode((instr >> 6) & 0x3);
1277988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1278088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1278188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1278288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1278388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1278488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_5_Decode((instr >> 4) & 0x3);
1278588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1278688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1278788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1278888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1278988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1279088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1279188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1279288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing = kSingle;
1279388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1279488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1279588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1279688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x7:
1279788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 1;
1279888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1279988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0xa:
1280088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1280188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1280288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x6:
1280388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1280488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1280588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x2:
1280688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1280788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1280888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1280988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last = first + length - 1;
1281088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1281188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1281288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12813d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1281488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst1(CurrentCond(),
1281588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1281688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1281788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1281888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1281988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1282088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1282188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1282288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1282388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1282488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1282588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1282688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000700: {
1282788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000700
1282888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1282988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe20) == 0x620) ||
1283088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf30) == 0xa30)) {
1283188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1283288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1283388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1283488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1283588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_6_Decode((instr >> 6) & 0x3);
1283688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1283788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1283888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1283988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1284088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1284188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_5_Decode((instr >> 4) & 0x3);
1284288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1284388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1284488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1284588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1284688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1284788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1284888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1284988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing = kSingle;
1285088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1285188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1285288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1285388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x7:
1285488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 1;
1285588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1285688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0xa:
1285788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1285888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1285988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x6:
1286088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1286188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1286288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x2:
1286388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1286488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1286588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1286688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last = first + length - 1;
1286788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1286888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1286988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12870d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1287188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst1(CurrentCond(),
1287288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1287388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1287488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1287588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1287688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1287788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1287888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1287988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1288088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1288188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1288288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1288388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000800: {
1288488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000800
1288588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1288688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe30) == 0x830)) {
1288788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1288888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1288988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1289088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1289188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1289288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1289388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1289488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1289588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1289688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1289788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_2_Decode((instr >> 4) & 0x3);
1289888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1289988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1290088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1290188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1290288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1290388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1290488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1290588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1290688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1290788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1290888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1290988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x8:
1291088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1291188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1291288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1291388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x9:
1291488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1291588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1291688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1291788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x3:
1291888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1291988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1292088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1292188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1292288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1292388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1292488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1292588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1292688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1292788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12928d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1292988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst2(CurrentCond(),
1293088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1293188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1293288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1293388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1293488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1293588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1293688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1293788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1293888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1293988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1294088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1294188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000900: {
1294288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000900
1294388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1294488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe30) == 0x830)) {
1294588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1294688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1294788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1294888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1294988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1295088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1295188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1295288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1295388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1295488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1295588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_2_Decode((instr >> 4) & 0x3);
1295688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1295788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1295888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1295988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1296088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1296188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1296288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1296388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1296488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1296588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1296688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1296788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x8:
1296888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1296988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1297088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1297188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x9:
1297288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1297388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1297488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1297588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x3:
1297688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1297788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1297888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1297988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1298088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1298188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1298288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1298388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1298488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1298588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
12986d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1298788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst2(CurrentCond(),
1298888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1298988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1299088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1299188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1299288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1299388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1299488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1299588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1299688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1299788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1299888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1299988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000a00: {
1300088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9000a00
1300188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1300288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe20) == 0x620) ||
1300388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf30) == 0xa30)) {
1300488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1300588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1300688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1300788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1300888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_6_Decode((instr >> 6) & 0x3);
1300988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1301088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1301188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1301288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1301388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1301488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_5_Decode((instr >> 4) & 0x3);
1301588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1301688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1301788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1301888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1301988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1302088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1302188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1302288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing = kSingle;
1302388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1302488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1302588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1302688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x7:
1302788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 1;
1302888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1302988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0xa:
1303088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1303188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1303288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x6:
1303388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1303488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1303588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x2:
1303688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1303788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1303888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1303988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last = first + length - 1;
1304088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1304188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1304288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
13043d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1304488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vst1(CurrentCond(),
1304588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1304688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1304788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1304888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1304988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1305088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1305188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1305288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1305388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1305488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1305588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
130564339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
1305788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1305888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1305988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1306088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1306188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1306288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1306388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1306488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1306588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01200000: {
1306688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf9200000
1306788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000000d) {
1306888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000000d: {
1306988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf920000d
1307088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000002) {
1307188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1307288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf920000d
1307388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000f00) {
1307488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1307588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920000d
1307688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1307788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1307888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1307988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1308088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1308188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1308288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1308388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_4_Decode((instr >> 4) & 0x3);
1308488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1308588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1308688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1308788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1308888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1308988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1309088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1309188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1309288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1309388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1309488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1309588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1309688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1309788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1309888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1309988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1310088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1310188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1310288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1310388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1310488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1310588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1310688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1310788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1310888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1310988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1311088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13111d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1311288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld4(CurrentCond(),
1311388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1311488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1311588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1311688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1311788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1311888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1311988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1312088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1312188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1312288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1312388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
1312488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920010d
1312588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1312688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1312788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1312888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1312988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1313088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1313188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1313288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_4_Decode((instr >> 4) & 0x3);
1313388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1313488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1313588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1313688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1313788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1313888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1313988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1314088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1314188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1314288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1314388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1314488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1314588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1314688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1314788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1314888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1314988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1315088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1315188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1315288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1315388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1315488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1315588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1315688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1315788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1315888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1315988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13160d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1316188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld4(CurrentCond(),
1316288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1316388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1316488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1316588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1316688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1316788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1316888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1316988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1317088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1317188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1317288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
1317388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920020d
1317488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1317588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1317688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1317788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1317888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1317988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1318088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1318188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1318288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1318388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1318488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1318588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1318688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_1_Decode((instr >> 4) & 0x3);
1318788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1318888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1318988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1319088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1319188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1319288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1319388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1319488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1319588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1319688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1319788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1319888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1319988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1320088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1320188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1320288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1320388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1320488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1320588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1320688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1320788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1320888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1320988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1321088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1321188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1321288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1321388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1321488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13215d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1321688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1321788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1321888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1321988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1322088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1322188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1322288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1322388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1322488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1322588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1322688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1322788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
1322888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920030d
1322988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1323088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1323188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1323288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1323388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1323488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1323588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1323688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1323788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1323888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1323988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1324088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1324188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1324288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1324388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1324488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1324588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1324688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1324788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1324888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1324988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1325088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1325188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1325288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1325388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1325488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1325588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1325688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1325788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1325888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1325988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1326088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1326188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1326288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1326388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1326488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1326588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1326688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1326788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1326888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1326988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1327088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1327188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13272d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1327388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld2(CurrentCond(),
1327488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1327588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1327688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1327788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1327888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1327988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1328088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1328188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1328288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1328388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1328488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000400: {
1328588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920040d
1328688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1328788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1328888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1328988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1329088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1329188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1329288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1329388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_3_Decode((instr >> 4) & 0x3);
1329488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1329588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1329688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1329788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1329888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1329988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1330088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1330188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1330288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1330388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1330488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1330588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1330688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x4:
1330788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1330888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1330988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1331088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
1331188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1331288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1331388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1331488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1331588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1331688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1331788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1331888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1331988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1332088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13321d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1332288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld3(CurrentCond(),
1332388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1332488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1332588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1332688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1332788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1332888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1332988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1333088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1333188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1333288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1333388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000500: {
1333488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920050d
1333588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1333688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1333788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1333888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1333988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1334088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1334188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1334288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_3_Decode((instr >> 4) & 0x3);
1334388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1334488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1334588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1334688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1334788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1334888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1334988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1335088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1335188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1335288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1335388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1335488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1335588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x4:
1335688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1335788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1335888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1335988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
1336088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1336188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1336288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1336388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1336488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1336588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1336688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1336788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1336888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1336988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13370d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1337188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld3(CurrentCond(),
1337288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1337388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1337488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1337588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1337688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1337788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1337888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1337988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1338088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1338188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1338288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000600: {
1338388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920060d
1338488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1338588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1338688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1338788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1338888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1338988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1339088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1339188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1339288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1339388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1339488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1339588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1339688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_1_Decode((instr >> 4) & 0x3);
1339788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1339888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1339988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1340088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1340188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1340288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1340388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1340488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1340588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1340688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1340788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1340888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1340988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1341088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1341188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1341288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1341388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1341488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1341588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1341688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1341788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1341888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1341988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1342088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1342188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1342288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1342388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1342488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13425d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1342688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1342788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1342888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1342988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1343088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1343188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1343288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1343388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1343488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1343588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1343688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1343788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000700: {
1343888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920070d
1343988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1344088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1344188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1344288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1344388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1344488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1344588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1344688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1344788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1344888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1344988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1345088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1345188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_1_Decode((instr >> 4) & 0x3);
1345288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1345388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1345488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1345588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1345688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1345788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1345888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1345988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1346088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1346188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1346288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1346388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1346488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1346588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1346688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1346788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1346888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1346988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1347088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1347188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1347288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1347388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1347488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1347588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1347688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1347788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1347888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1347988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13480d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1348188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1348288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1348388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1348488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1348588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1348688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1348788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1348888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1348988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1349088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1349188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1349288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000800: {
1349388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920080d
1349488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1349588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1349688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1349788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1349888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1349988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1350088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1350188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1350288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1350388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1350488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1350588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1350688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1350788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1350888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1350988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1351088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1351188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1351288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1351388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1351488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1351588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1351688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1351788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1351888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1351988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1352088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1352188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1352288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1352388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1352488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1352588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1352688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1352788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1352888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1352988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1353088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1353188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1353288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1353388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1353488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1353588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1353688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13537d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1353888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld2(CurrentCond(),
1353988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1354088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1354188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1354288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1354388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1354488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1354588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1354688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1354788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1354888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1354988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000900: {
1355088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920090d
1355188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1355288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1355388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1355488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1355588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1355688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1355788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1355888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1355988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1356088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1356188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1356288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1356388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1356488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1356588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1356688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1356788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1356888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1356988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1357088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1357188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1357288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1357388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1357488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1357588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1357688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1357788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1357888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1357988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1358088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1358188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1358288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1358388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1358488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1358588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1358688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1358788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1358888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1358988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1359088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1359188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1359288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1359388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13594d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1359588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld2(CurrentCond(),
1359688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1359788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1359888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1359988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1360088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1360188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1360288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1360388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1360488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1360588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1360688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000a00: {
1360788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9200a0d
1360888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1360988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1361088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1361188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1361288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1361388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1361488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1361588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1361688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1361788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1361888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1361988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1362088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_1_Decode((instr >> 4) & 0x3);
1362188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1362288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1362388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1362488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1362588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1362688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1362788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1362888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1362988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1363088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1363188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1363288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1363388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1363488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1363588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1363688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1363788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1363888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1363988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1364088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1364188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1364288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1364388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1364488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1364588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1364688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1364788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1364888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13649d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1365088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1365188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1365288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1365388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1365488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1365588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1365688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1365788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1365888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1365988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1366088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
136614339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1366288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1366388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1366488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1366588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1366688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1366788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000002: {
1366888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf920000f
1366988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000f00) {
1367088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1367188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920000d
1367288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1367388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1367488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1367588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1367688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1367788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1367888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1367988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_4_Decode((instr >> 4) & 0x3);
1368088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1368188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1368288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1368388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1368488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1368588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1368688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1368788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1368888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1368988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1369088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1369188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1369288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1369388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1369488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1369588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1369688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1369788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1369888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1369988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1370088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1370188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1370288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1370388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1370488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1370588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1370688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13707d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1370888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld4(CurrentCond(),
1370988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1371088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1371188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1371288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1371388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1371488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1371588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1371688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1371788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1371888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1371988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
1372088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920010d
1372188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1372288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1372388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1372488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1372588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1372688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1372788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1372888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_4_Decode((instr >> 4) & 0x3);
1372988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1373088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1373188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1373288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1373388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1373488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1373588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1373688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1373788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1373888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1373988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1374088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1374188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1374288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1374388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1374488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1374588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1374688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1374788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1374888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1374988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1375088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1375188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1375288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1375388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1375488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1375588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13756d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1375788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld4(CurrentCond(),
1375888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1375988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1376088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1376188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1376288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1376388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1376488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1376588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1376688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1376788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1376888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
1376988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920020d
1377088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1377188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1377288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1377388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1377488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1377588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1377688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1377788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1377888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1377988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1378088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1378188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1378288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_1_Decode((instr >> 4) & 0x3);
1378388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1378488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1378588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1378688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1378788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1378888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1378988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1379088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1379188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1379288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1379388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1379488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1379588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1379688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1379788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1379888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1379988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1380088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1380188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1380288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1380388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1380488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1380588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1380688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1380788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1380888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1380988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1381088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13811d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1381288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1381388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1381488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1381588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1381688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1381788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1381888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1381988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1382088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1382188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1382288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1382388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
1382488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920030d
1382588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1382688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1382788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1382888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1382988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1383088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1383188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1383288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1383388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1383488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1383588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1383688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1383788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1383888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1383988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1384088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1384188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1384288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1384388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1384488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1384588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1384688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1384788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1384888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1384988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1385088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1385188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1385288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1385388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1385488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1385588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1385688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1385788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1385888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1385988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1386088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1386188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1386288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1386388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1386488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1386588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1386688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1386788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13868d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1386988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld2(CurrentCond(),
1387088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1387188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1387288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1387388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1387488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1387588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1387688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1387788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1387888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1387988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1388088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000400: {
1388188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920040d
1388288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1388388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1388488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1388588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1388688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1388788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1388888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1388988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_3_Decode((instr >> 4) & 0x3);
1389088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1389188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1389288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1389388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1389488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1389588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1389688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1389788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1389888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1389988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1390088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1390188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1390288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x4:
1390388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1390488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1390588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1390688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
1390788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1390888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1390988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1391088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1391188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1391288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1391388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1391488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1391588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1391688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13917d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1391888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld3(CurrentCond(),
1391988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1392088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1392188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1392288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1392388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1392488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1392588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1392688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1392788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1392888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1392988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000500: {
1393088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920050d
1393188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1393288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1393388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1393488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1393588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1393688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1393788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1393888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_3_Decode((instr >> 4) & 0x3);
1393988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1394088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1394188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1394288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1394388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1394488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1394588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1394688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1394788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1394888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1394988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1395088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1395188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x4:
1395288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1395388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1395488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1395588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
1395688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1395788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1395888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1395988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1396088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1396188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1396288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1396388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1396488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1396588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
13966d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1396788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld3(CurrentCond(),
1396888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1396988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1397088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1397188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1397288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1397388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1397488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1397588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1397688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1397788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1397888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000600: {
1397988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920060d
1398088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1398188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1398288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1398388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1398488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1398588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1398688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1398788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1398888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1398988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1399088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1399188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1399288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_1_Decode((instr >> 4) & 0x3);
1399388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1399488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1399588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1399688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1399788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1399888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1399988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1400088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1400188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1400288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1400388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1400488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1400588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1400688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1400788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1400888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1400988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1401088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1401188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1401288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1401388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1401488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1401588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1401688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1401788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1401888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1401988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1402088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
14021d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1402288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1402388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1402488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1402588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1402688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1402788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1402888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1402988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1403088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1403188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1403288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1403388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000700: {
1403488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920070d
1403588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1403688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1403788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1403888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1403988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1404088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1404188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1404288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1404388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1404488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1404588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1404688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1404788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_1_Decode((instr >> 4) & 0x3);
1404888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1404988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1405088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1405188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1405288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1405388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1405488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1405588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1405688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1405788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1405888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1405988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1406088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1406188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1406288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1406388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1406488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1406588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1406688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1406788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1406888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1406988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1407088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1407188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1407288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1407388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1407488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1407588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
14076d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1407788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1407888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1407988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1408088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1408188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1408288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1408388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1408488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1408588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1408688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1408788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1408888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000800: {
1408988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920080d
1409088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1409188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1409288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1409388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1409488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1409588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1409688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1409788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1409888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1409988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1410088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1410188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1410288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1410388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1410488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1410588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1410688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1410788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1410888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1410988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1411088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1411188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1411288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1411388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1411488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1411588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1411688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1411788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1411888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1411988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1412088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1412188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1412288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1412388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1412488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1412588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1412688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1412788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1412888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1412988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1413088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1413188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1413288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
14133d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1413488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld2(CurrentCond(),
1413588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1413688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1413788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1413888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1413988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1414088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1414188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1414288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1414388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1414488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1414588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000900: {
1414688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf920090d
1414788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe30) == 0x830)) {
1414888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1414988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1415088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1415188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1415288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1415388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1415488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1415588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1415688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1415788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1415888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_2_Decode((instr >> 4) & 0x3);
1415988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1416088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1416188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1416288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1416388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1416488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1416588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1416688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1416788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1416888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1416988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1417088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1417188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8:
1417288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1417388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1417488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1417588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x9:
1417688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1417788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1417888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1417988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x3:
1418088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1418188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1418288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1418388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1418488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1418588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1418688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1418788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1418888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1418988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
14190d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1419188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld2(CurrentCond(),
1419288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1419388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1419488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1419588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1419688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1419788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1419888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1419988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1420088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1420188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1420288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000a00: {
1420388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9200a0d
1420488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xe20) == 0x620) ||
1420588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf30) == 0xa30)) {
1420688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1420788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1420888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1420988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1421088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_6_Decode((instr >> 6) & 0x3);
1421188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1421288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1421388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1421488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1421588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1421688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_align_1_Decode((instr >> 4) & 0x3);
1421788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1421888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1421988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1422088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1422188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1422288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1422388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1422488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1422588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1422688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 8) & 0xf) {
1422788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1422888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1422988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
1423088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1423188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1423288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0xa:
1423388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1423488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1423588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
1423688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 3;
1423788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1423888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x2:
1423988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1424088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1424188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1424288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1424388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kMultipleLanes;
1424488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
14245d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1424688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1424788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1424888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1424988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1425088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1425188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1425288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1425388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1425488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1425588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1425688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
142574339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1425888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1425988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1426088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1426188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1426288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1426388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1426488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1426588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1426688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1426788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000f00) {
1426888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1426988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200000
1427088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd)) {
1427188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1427288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1427388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1427488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1427588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1427688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1427788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1427888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1427988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1428088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1428188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_4_Decode((instr >> 4) & 0x3);
1428288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1428388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1428488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1428588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1428688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1428788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1428888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1428988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1429088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1429188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1429288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1429388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0:
1429488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1429588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1429688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1429788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x1:
1429888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1429988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1430088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1430188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1430288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1430388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1430488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1430588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1430688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1430788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14308d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1430988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld4(CurrentCond(),
1431088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1431188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1431288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1431388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1431488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1431588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1431688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1431788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1431888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1431988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1432088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1432188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
1432288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200100
1432388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd)) {
1432488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1432588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1432688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1432788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1432888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1432988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1433088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1433188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1433288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1433388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1433488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_4_Decode((instr >> 4) & 0x3);
1433588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1433688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1433788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1433888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1433988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1434088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1434188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1434288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1434388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1434488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1434588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1434688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0:
1434788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1434888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1434988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1435088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x1:
1435188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1435288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1435388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1435488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1435588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1435688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1435788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1435888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1435988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1436088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14361d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1436288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld4(CurrentCond(),
1436388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1436488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1436588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1436688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1436788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1436888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1436988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1437088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1437188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1437288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1437388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1437488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000200: {
1437588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200200
1437688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1437788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe20) == 0x620) ||
1437888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf30) == 0xa30)) {
1437988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1438088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1438188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1438288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1438388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_6_Decode((instr >> 6) & 0x3);
1438488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1438588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1438688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1438788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1438888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1438988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_1_Decode((instr >> 4) & 0x3);
1439088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1439188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1439288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1439388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1439488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1439588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1439688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1439788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing = kSingle;
1439888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1439988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1440088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1440188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x7:
1440288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 1;
1440388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1440488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0xa:
1440588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1440688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1440788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x6:
1440888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1440988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1441088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x2:
1441188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1441288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1441388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1441488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last = first + length - 1;
1441588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1441688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1441788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14418d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1441988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld1(CurrentCond(),
1442088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1442188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1442288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1442388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1442488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1442588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1442688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1442788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1442888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1442988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1443088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1443188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000300: {
1443288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200300
1443388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1443488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe30) == 0x830)) {
1443588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1443688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1443788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1443888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1443988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1444088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1444188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1444288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1444388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1444488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1444588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_2_Decode((instr >> 4) & 0x3);
1444688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1444788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1444888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1444988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1445088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1445188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1445288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1445388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1445488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1445588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1445688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1445788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x8:
1445888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1445988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1446088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1446188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x9:
1446288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1446388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1446488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1446588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x3:
1446688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1446788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1446888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1446988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1447088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1447188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1447288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1447388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1447488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1447588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14476d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1447788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld2(CurrentCond(),
1447888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1447988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1448088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1448188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1448288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1448388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1448488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1448588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1448688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1448788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1448888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1448988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000400: {
1449088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200400
1449188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd)) {
1449288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1449388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1449488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1449588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1449688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1449788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1449888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1449988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1450088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1450188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1450288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_3_Decode((instr >> 4) & 0x3);
1450388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1450488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1450588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1450688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1450788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1450888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1450988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1451088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1451188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1451288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1451388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1451488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x4:
1451588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1451688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1451788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1451888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x5:
1451988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1452088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1452188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1452288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1452388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1452488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1452588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1452688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1452788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1452888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14529d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1453088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld3(CurrentCond(),
1453188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1453288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1453388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1453488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1453588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1453688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1453788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1453888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1453988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1454088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1454188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1454288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000500: {
1454388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200500
1454488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd)) {
1454588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1454688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1454788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1454888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1454988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1455088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1455188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1455288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1455388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1455488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1455588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_3_Decode((instr >> 4) & 0x3);
1455688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1455788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1455888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1455988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1456088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1456188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1456288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1456388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1456488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1456588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1456688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1456788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x4:
1456888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1456988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1457088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1457188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x5:
1457288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1457388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1457488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1457588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1457688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1457788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1457888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1457988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1458088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1458188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14582d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1458388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld3(CurrentCond(),
1458488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1458588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1458688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1458788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1458888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1458988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1459088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1459188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1459288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1459388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1459488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1459588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000600: {
1459688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200600
1459788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1459888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe20) == 0x620) ||
1459988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf30) == 0xa30)) {
1460088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1460188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1460288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1460388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1460488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_6_Decode((instr >> 6) & 0x3);
1460588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1460688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1460788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1460888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1460988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1461088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_1_Decode((instr >> 4) & 0x3);
1461188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1461288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1461388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1461488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1461588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1461688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1461788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1461888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing = kSingle;
1461988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1462088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1462188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1462288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x7:
1462388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 1;
1462488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1462588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0xa:
1462688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1462788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1462888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x6:
1462988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1463088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1463188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x2:
1463288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1463388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1463488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1463588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last = first + length - 1;
1463688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1463788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1463888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14639d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1464088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld1(CurrentCond(),
1464188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1464288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1464388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1464488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1464588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1464688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1464788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1464888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1464988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1465088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1465188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1465288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000700: {
1465388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200700
1465488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1465588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe20) == 0x620) ||
1465688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf30) == 0xa30)) {
1465788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1465888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1465988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1466088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1466188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_6_Decode((instr >> 6) & 0x3);
1466288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1466388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1466488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1466588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1466688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1466788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_1_Decode((instr >> 4) & 0x3);
1466888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1466988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1467088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1467188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1467288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1467388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1467488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1467588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing = kSingle;
1467688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1467788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1467888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1467988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x7:
1468088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 1;
1468188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1468288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0xa:
1468388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1468488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1468588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x6:
1468688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1468788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1468888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x2:
1468988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1469088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1469188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1469288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last = first + length - 1;
1469388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1469488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1469588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14696d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1469788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld1(CurrentCond(),
1469888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1469988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1470088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1470188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1470288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1470388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1470488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1470588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1470688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1470788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1470888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1470988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000800: {
1471088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200800
1471188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1471288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe30) == 0x830)) {
1471388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1471488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1471588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1471688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1471788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1471888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1471988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1472088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1472188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1472288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1472388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_2_Decode((instr >> 4) & 0x3);
1472488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1472588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1472688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1472788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1472888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1472988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1473088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1473188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1473288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1473388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1473488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1473588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x8:
1473688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1473788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1473888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1473988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x9:
1474088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1474188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1474288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1474388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x3:
1474488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1474588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1474688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1474788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1474888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1474988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1475088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1475188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1475288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1475388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14754d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1475588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld2(CurrentCond(),
1475688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1475788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1475888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1475988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1476088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1476188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1476288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1476388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1476488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1476588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1476688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1476788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000900: {
1476888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200900
1476988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1477088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe30) == 0x830)) {
1477188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1477288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1477388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1477488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1477588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 6) & 0x3);
1477688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1477788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1477888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1477988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1478088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1478188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_2_Decode((instr >> 4) & 0x3);
1478288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1478388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1478488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1478588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1478688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1478788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1478888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1478988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing;
1479088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1479188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1479288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1479388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x8:
1479488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1479588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1479688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1479788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x9:
1479888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1479988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kDouble;
1480088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1480188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x3:
1480288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1480388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  spacing = kSingle;
1480488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1480588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1480688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last =
1480788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  first +
1480888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (length - 1) * (spacing == kSingle ? 1 : 2);
1480988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1481088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1481188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14812d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1481388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld2(CurrentCond(),
1481488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1481588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1481688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1481788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1481888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1481988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1482088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1482188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1482288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1482388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1482488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1482588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000a00: {
1482688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9200a00
1482788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xd) == 0xd) ||
1482888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe20) == 0x620) ||
1482988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf30) == 0xa30)) {
1483088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1483188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1483288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1483388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
1483488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_6_Decode((instr >> 6) & 0x3);
1483588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
1483688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1483788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1483888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1483988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Alignment align =
1484088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Align_align_1_Decode((instr >> 4) & 0x3);
1484188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid) ||
1484288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  align.Is(kBadAlignment)) {
1484388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1484488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1484588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1484688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
1484788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned length;
1484888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SpacingType spacing = kSingle;
1484988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch ((instr >> 8) & 0xf) {
1485088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
1485188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  VIXL_UNREACHABLE_OR_FALLTHROUGH();
1485288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x7:
1485388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 1;
1485488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1485588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0xa:
1485688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 2;
1485788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1485888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x6:
1485988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 3;
1486088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1486188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x2:
1486288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  length = 4;
1486388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1486488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1486588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned last = first + length - 1;
1486688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              TransferType transfer = kMultipleLanes;
1486788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1486888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
14869d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1487088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vld1(CurrentCond(),
1487188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
1487288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   NeonRegisterList(DRegister(first),
1487388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(last),
1487488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    spacing,
1487588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    transfer),
1487688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   AlignedMemOperand(Register(rn),
1487788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     align,
1487888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Register(rm),
1487988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1488088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1488188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
148824339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
1488388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1488488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1488588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1488688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1488788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1488888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1488988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1489088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1489188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01800000: {
1489288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf9800000
1489388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000300) {
1489488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1489588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9800000
1489688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c00) {
1489788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
1489888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800c00
1489988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1490088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1490188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1490288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1490388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1490488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1490588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf980000d
1490688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1490788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1490888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf980000d
1490988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1491088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1491188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1491288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1491388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1491488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1491588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1491688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1491788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1491888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1491988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1492088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_1_Decode((instr >>
1492188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1492288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1492388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1492488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1492588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1492688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1492788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1492888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1492988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1493088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1493188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1493288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1493388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1493488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 1;
1493588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last = first + length - 1;
1493688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
14937d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1493888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vst1(CurrentCond(),
1493988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1494088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1494188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1494288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1494388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1494488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1494588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1494688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1494788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1494888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1494988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1495088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf980000f
1495188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1495288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1495388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1495488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1495588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1495688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1495788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1495888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1495988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1496088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1496188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1496288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_1_Decode((instr >>
1496388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1496488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1496588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1496688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1496788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1496888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1496988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1497088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1497188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1497288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1497388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1497488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1497588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1497688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 1;
1497788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last = first + length - 1;
1497888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
14979d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1498088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vst1(CurrentCond(),
1498188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1498288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1498388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1498488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1498588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1498688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1498788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1498888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1498988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1499088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1499188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1499288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1499388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1499488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1499588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xc00) == 0xc00) ||
1499688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xd) == 0xd)) {
1499788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1499888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1499988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1500088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1500188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 10) & 0x3);
1500288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1500388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1500488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1500588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1500688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DecodeNeonAndAlign decode_neon =
1500788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_index_align_1_Decode((instr >> 4) &
1500888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     0xf,
1500988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 dt);
1501088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (!decode_neon.IsValid()) {
1501188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1501288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1501388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1501488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align = decode_neon.GetAlign();
1501588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane = decode_neon.GetLane();
1501688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing =
1501788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      decode_neon.GetSpacing();
1501888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1501988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1502088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length = 1;
1502188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1502288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1502388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
15024d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1502588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst1(CurrentCond(),
1502688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1502788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1502888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1502988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1503088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        lane),
1503188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1503288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1503388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1503488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1503588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1503688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1503788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1503888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1503988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1504088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1504188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1504288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1504388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000100: {
1504488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9800100
1504588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c00) {
1504688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
1504788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800d00
1504888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1504988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1505088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1505188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1505288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1505388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1505488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf980010d
1505588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1505688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1505788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf980010d
1505888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1505988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1506088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1506188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1506288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1506388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1506488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1506588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1506688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1506788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1506888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1506988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_2_Decode((instr >>
1507088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1507188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1507288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1507388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1507488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1507588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1507688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1507788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1507888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1507988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1508088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1508188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1508288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1508388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 2;
1508488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1508588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1508688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1508788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1508888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15089d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1509088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vst2(CurrentCond(),
1509188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1509288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1509388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1509488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1509588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1509688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1509788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1509888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1509988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1510088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1510188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1510288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf980010f
1510388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1510488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1510588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1510688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1510788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1510888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1510988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1511088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1511188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1511288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1511388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1511488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_2_Decode((instr >>
1511588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1511688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1511788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1511888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1511988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1512088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1512188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1512288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1512388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1512488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1512588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1512688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1512788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1512888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 2;
1512988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1513088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1513188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1513288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1513388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15134d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1513588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vst2(CurrentCond(),
1513688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1513788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1513888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1513988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1514088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1514188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1514288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1514388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1514488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1514588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1514688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1514788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1514888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1514988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1515088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xc00) == 0xc00) ||
1515188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xd) == 0xd)) {
1515288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1515388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1515488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1515588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1515688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 10) & 0x3);
1515788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1515888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1515988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1516088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1516188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DecodeNeonAndAlign decode_neon =
1516288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_index_align_2_Decode((instr >> 4) &
1516388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     0xf,
1516488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 dt);
1516588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (!decode_neon.IsValid()) {
1516688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1516788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1516888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1516988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align = decode_neon.GetAlign();
1517088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane = decode_neon.GetLane();
1517188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing =
1517288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      decode_neon.GetSpacing();
1517388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1517488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1517588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length = 2;
1517688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1517788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1517888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1517988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1518088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1518188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
15182d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1518388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst2(CurrentCond(),
1518488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1518588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1518688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1518788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1518888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        lane),
1518988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1519088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1519188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1519288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1519388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1519488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1519588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1519688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1519788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1519888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1519988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1520088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1520188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000200: {
1520288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9800200
1520388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c30) {
1520488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000010: {
1520588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800210
1520688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1520788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1520888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1520988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1521088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800230
1521188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1521288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1521388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1521488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000410: {
1521588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800610
1521688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1521788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1521888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1521988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000430: {
1522088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800630
1522188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1522288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1522388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1522488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000810: {
1522588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800a10
1522688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1522788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1522888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1522988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000820: {
1523088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800a20
1523188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1523288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1523388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1523488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000830: {
1523588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800a30
1523688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1523788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1523888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1523988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
1524088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800e00
1524188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1524288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1524388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1524488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c10: {
1524588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800e10
1524688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1524788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1524888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1524988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c20: {
1525088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800e20
1525188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1525288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1525388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1525488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c30: {
1525588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800e30
1525688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1525788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1525888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1525988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1526088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1526188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1526288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf980020d
1526388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1526488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1526588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf980020d
1526688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00) ||
1526788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x810) == 0x10) ||
1526888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc30) == 0x810) ||
1526988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc30) == 0x820) ||
1527088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc30) == 0x830)) {
1527188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1527288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1527388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1527488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1527588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1527688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1527788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1527888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1527988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1528088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeon decode_neon =
1528188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Index_1_Decode((instr >> 4) & 0xf,
1528288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         dt);
1528388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1528488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1528588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1528688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1528788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1528888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1528988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1529088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1529188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1529288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 3;
1529388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1529488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1529588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1529688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1529788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15298d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VST3{<c>}{<q>}.<dt> <list>, [<Rn>]! ; T1 NOLINT(whitespace/line_length)
1529988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vst3(CurrentCond(),
1530088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1530188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1530288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1530388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1530488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1530588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           MemOperand(Register(rn), PreIndex));
1530688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1530788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1530888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1530988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf980020f
1531088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00) ||
1531188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x810) == 0x10) ||
1531288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc30) == 0x810) ||
1531388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc30) == 0x820) ||
1531488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc30) == 0x830)) {
1531588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1531688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1531788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1531888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1531988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1532088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1532188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1532288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1532388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1532488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeon decode_neon =
1532588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Index_1_Decode((instr >> 4) & 0xf,
1532688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         dt);
1532788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1532888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1532988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1533088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1533188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1533288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1533388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1533488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1533588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1533688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 3;
1533788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1533888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1533988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1534088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1534188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1534288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VST3{<c>}{<q>}.<dt> <list>, [<Rn>] ; T1
1534388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vst3(CurrentCond(),
1534488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1534588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1534688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1534788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1534888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1534988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           MemOperand(Register(rn), Offset));
1535088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1535188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1535288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1535388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1535488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1535588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1535688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xc00) == 0xc00) ||
1535788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xd) == 0xd) ||
1535888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0x810) == 0x10) ||
1535988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xc30) == 0x810) ||
1536088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xc30) == 0x820) ||
1536188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xc30) == 0x830)) {
1536288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1536388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1536488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1536588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1536688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 10) & 0x3);
1536788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1536888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1536988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1537088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1537188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DecodeNeon decode_neon =
1537288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Index_1_Decode((instr >> 4) & 0xf, dt);
1537388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (!decode_neon.IsValid()) {
1537488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1537588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1537688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1537788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane = decode_neon.GetLane();
1537888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing =
1537988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      decode_neon.GetSpacing();
1538088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1538188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1538288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length = 3;
1538388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1538488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1538588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1538688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1538788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1538888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Sign sign(plus);
1538988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
15390d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST3{<c>}{<q>}.<dt> <list>, [<Rn>], #<Rm> ; T1 NOLINT(whitespace/line_length)
1539188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst3(CurrentCond(),
1539288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1539388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1539488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1539588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1539688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        lane),
1539788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
1539888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign,
1539988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Register(rm),
1540088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  PostIndex));
1540188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1540288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1540388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1540488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1540588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1540688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1540788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1540888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1540988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000300: {
1541088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9800300
1541188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c00) {
1541288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
1541388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9800f00
1541488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
1541588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1541688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1541788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1541888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1541988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1542088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf980030d
1542188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1542288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1542388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf980030d
1542488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1542588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1542688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1542788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1542888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1542988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1543088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1543188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1543288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1543388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1543488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1543588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_3_Decode((instr >>
1543688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1543788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1543888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1543988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1544088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1544188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1544288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1544388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1544488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1544588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1544688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1544788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1544888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1544988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 4;
1545088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1545188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1545288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1545388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1545488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15455d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1545688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vst4(CurrentCond(),
1545788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1545888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1545988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1546088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1546188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1546288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1546388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1546488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1546588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1546688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1546788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1546888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf980030f
1546988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1547088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1547188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1547288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1547388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1547488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1547588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1547688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1547788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1547888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1547988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1548088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_3_Decode((instr >>
1548188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1548288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1548388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1548488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1548588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1548688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1548788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1548888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1548988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1549088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1549188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1549288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1549388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1549488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 4;
1549588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1549688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1549788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1549888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1549988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15500d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1550188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vst4(CurrentCond(),
1550288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1550388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1550488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1550588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1550688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1550788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1550888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1550988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1551088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1551188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1551288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1551388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1551488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1551588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1551688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xc00) == 0xc00) ||
1551788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xd) == 0xd)) {
1551888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1551988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1552088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1552188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1552288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 10) & 0x3);
1552388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1552488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1552588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1552688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1552788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DecodeNeonAndAlign decode_neon =
1552888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_index_align_3_Decode((instr >> 4) &
1552988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     0xf,
1553088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 dt);
1553188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (!decode_neon.IsValid()) {
1553288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1553388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1553488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1553588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align = decode_neon.GetAlign();
1553688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane = decode_neon.GetLane();
1553788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing =
1553888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      decode_neon.GetSpacing();
1553988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1554088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1554188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length = 4;
1554288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1554388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1554488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1554588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1554688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1554788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
15548d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1554988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vst4(CurrentCond(),
1555088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1555188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1555288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1555388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1555488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        lane),
1555588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1555688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1555788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1555888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1555988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1556088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1556188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1556288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1556388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1556488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1556588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1556688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1556788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1556888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1556988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1557088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01a00000: {
1557188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf9a00000
1557288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000300) {
1557388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1557488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9a00000
1557588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c00) {
1557688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
1557788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9a00c00
1557888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1557988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1558088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9a00c0d
1558188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1558288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1558388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a00c0d
1558488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1558588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 6) & 0x3);
1558688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1558788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1558888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1558988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1559088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align =
1559188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_a_1_Decode((instr >> 4) & 0x1,
1559288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
1559388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid) ||
1559488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          align.Is(kBadAlignment)) {
1559588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1559688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1559788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1559888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1559988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1560088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
1560188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing = kSingle;
1560288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 5) & 0x1) {
1560388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
1560488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
1560588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
1560688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 1;
1560788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1560888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
1560988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 2;
1561088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1561188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1561288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last = first + length - 1;
1561388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kAllLanes;
1561488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15615d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1561688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld1(CurrentCond(),
1561788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1561888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1561988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1562088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1562188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
1562288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1562388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1562488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1562588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1562688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1562788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1562888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a00c0f
1562988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1563088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 6) & 0x3);
1563188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1563288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1563388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1563488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1563588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align =
1563688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_a_1_Decode((instr >> 4) & 0x1,
1563788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
1563888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid) ||
1563988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          align.Is(kBadAlignment)) {
1564088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1564188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1564288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1564388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1564488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1564588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
1564688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing = kSingle;
1564788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 5) & 0x1) {
1564888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
1564988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
1565088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
1565188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 1;
1565288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1565388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
1565488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 2;
1565588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1565688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1565788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last = first + length - 1;
1565888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kAllLanes;
1565988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15660d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1566188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld1(CurrentCond(),
1566288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1566388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1566488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1566588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1566688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
1566788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1566888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1566988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1567088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1567188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1567288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1567388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1567488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1567588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1567688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xd) == 0xd)) {
1567788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1567888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1567988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1568088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1568188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1568288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1568388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1568488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1568588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1568688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1568788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_a_1_Decode((instr >> 4) & 0x1, dt);
1568888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1568988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1569088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1569188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1569288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1569388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1569488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1569588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1569688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing = kSingle;
1569788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 5) & 0x1) {
1569888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1569988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1570088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1570188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 1;
1570288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1570388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1570488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1570588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1570688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1570788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1570888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kAllLanes;
1570988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1571088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
15711d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1571288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1571388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1571488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1571588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1571688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1571788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1571888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1571988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1572088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1572188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1572288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1572388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1572488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1572588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1572688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1572788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1572888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1572988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1573088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9a0000d
1573188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1573288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1573388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a0000d
1573488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1573588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1573688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1573788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1573888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1573988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1574088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1574188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1574288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1574388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1574488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1574588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_1_Decode((instr >>
1574688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1574788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1574888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1574988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1575088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1575188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1575288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1575388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1575488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1575588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1575688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1575788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1575888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1575988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 1;
1576088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last = first + length - 1;
1576188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15762d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1576388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld1(CurrentCond(),
1576488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1576588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1576688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1576788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1576888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1576988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1577088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1577188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1577288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1577388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1577488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1577588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a0000f
1577688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1577788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1577888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1577988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1578088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1578188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1578288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1578388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1578488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1578588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1578688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1578788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_1_Decode((instr >>
1578888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1578988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1579088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1579188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1579288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1579388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1579488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1579588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1579688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1579788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1579888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1579988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1580088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1580188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 1;
1580288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last = first + length - 1;
1580388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15804d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1580588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld1(CurrentCond(),
1580688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1580788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1580888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1580988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1581088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1581188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1581288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1581388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1581488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1581588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1581688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1581788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1581888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1581988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1582088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xc00) == 0xc00) ||
1582188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xd) == 0xd)) {
1582288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1582388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1582488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1582588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1582688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 10) & 0x3);
1582788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1582888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1582988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1583088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1583188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DecodeNeonAndAlign decode_neon =
1583288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_index_align_1_Decode((instr >> 4) &
1583388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     0xf,
1583488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 dt);
1583588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (!decode_neon.IsValid()) {
1583688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1583788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1583888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1583988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align = decode_neon.GetAlign();
1584088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane = decode_neon.GetLane();
1584188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing =
1584288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      decode_neon.GetSpacing();
1584388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1584488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1584588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length = 1;
1584688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last = first + length - 1;
1584788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1584888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
15849d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1585088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld1(CurrentCond(),
1585188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1585288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1585388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1585488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1585588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        lane),
1585688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1585788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1585888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1585988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1586088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1586188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1586288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1586388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1586488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1586588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1586688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1586788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1586888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000100: {
1586988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9a00100
1587088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c00) {
1587188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
1587288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9a00d00
1587388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1587488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1587588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9a00d0d
1587688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1587788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1587888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a00d0d
1587988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1588088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 6) & 0x3);
1588188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1588288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1588388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1588488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1588588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align =
1588688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_a_2_Decode((instr >> 4) & 0x1,
1588788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
1588888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid) ||
1588988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          align.Is(kBadAlignment)) {
1589088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1589188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1589288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1589388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1589488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1589588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
1589688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing;
1589788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 5) & 0x1) {
1589888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
1589988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
1590088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
1590188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 2;
1590288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kSingle;
1590388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1590488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
1590588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 2;
1590688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kDouble;
1590788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1590888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1590988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1591088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1591188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1591288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1591388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kAllLanes;
1591488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15915d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1591688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld2(CurrentCond(),
1591788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1591888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1591988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1592088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1592188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
1592288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1592388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1592488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1592588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1592688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1592788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1592888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a00d0f
1592988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1593088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 6) & 0x3);
1593188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1593288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1593388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1593488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1593588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align =
1593688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_a_2_Decode((instr >> 4) & 0x1,
1593788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
1593888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid) ||
1593988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          align.Is(kBadAlignment)) {
1594088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1594188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1594288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1594388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1594488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1594588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
1594688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing;
1594788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 5) & 0x1) {
1594888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
1594988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
1595088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
1595188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 2;
1595288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kSingle;
1595388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1595488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
1595588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 2;
1595688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kDouble;
1595788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1595888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1595988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1596088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1596188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1596288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1596388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kAllLanes;
1596488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
15965d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1596688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld2(CurrentCond(),
1596788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1596888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1596988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1597088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1597188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
1597288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1597388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1597488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1597588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1597688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1597788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1597888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1597988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1598088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1598188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xd) == 0xd)) {
1598288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1598388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1598488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1598588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1598688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 6) & 0x3);
1598788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1598888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1598988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1599088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1599188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1599288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_a_2_Decode((instr >> 4) & 0x1, dt);
1599388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1599488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1599588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1599688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1599788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1599888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1599988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1600088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1600188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1600288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 5) & 0x1) {
1600388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1600488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1600588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1600688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1600788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1600888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1600988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1601088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 2;
1601188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1601288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1601388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1601488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1601588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1601688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1601788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1601888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kAllLanes;
1601988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1602088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
16021d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1602288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld2(CurrentCond(),
1602388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1602488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1602588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1602688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1602788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1602888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1602988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1603088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1603188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1603288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1603388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1603488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1603588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1603688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1603788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1603888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1603988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1604088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9a0010d
1604188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1604288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1604388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a0010d
1604488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1604588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1604688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1604788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1604888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1604988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1605088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1605188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1605288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1605388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1605488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1605588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_2_Decode((instr >>
1605688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1605788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1605888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1605988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1606088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1606188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1606288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1606388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1606488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1606588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1606688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1606788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1606888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1606988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 2;
1607088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1607188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1607288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1607388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1607488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
16075d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1607688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld2(CurrentCond(),
1607788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1607888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1607988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1608088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1608188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1608288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1608388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1608488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1608588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1608688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1608788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1608888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a0010f
1608988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1609088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1609188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1609288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1609388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1609488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1609588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1609688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1609788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1609888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1609988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1610088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_2_Decode((instr >>
1610188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1610288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1610388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1610488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1610588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1610688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1610788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1610888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1610988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1611088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1611188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1611288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1611388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1611488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 2;
1611588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1611688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1611788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1611888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1611988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
16120d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1612188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld2(CurrentCond(),
1612288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1612388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1612488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1612588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1612688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1612788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1612888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1612988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1613088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1613188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1613288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1613388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1613488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1613588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1613688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xc00) == 0xc00) ||
1613788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xd) == 0xd)) {
1613888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1613988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1614088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1614188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1614288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 10) & 0x3);
1614388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1614488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1614588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1614688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1614788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DecodeNeonAndAlign decode_neon =
1614888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_index_align_2_Decode((instr >> 4) &
1614988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     0xf,
1615088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 dt);
1615188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (!decode_neon.IsValid()) {
1615288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1615388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1615488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1615588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align = decode_neon.GetAlign();
1615688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane = decode_neon.GetLane();
1615788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing =
1615888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      decode_neon.GetSpacing();
1615988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1616088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1616188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length = 2;
1616288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1616388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1616488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1616588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1616688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1616788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
16168d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1616988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld2(CurrentCond(),
1617088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1617188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1617288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1617388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1617488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        lane),
1617588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1617688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1617788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1617888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1617988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1618088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1618188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1618288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1618388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1618488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1618588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1618688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1618788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000200: {
1618888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9a00200
1618988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c00) {
1619088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
1619188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9a00e00
1619288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000010) {
1619388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1619488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9a00e00
1619588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x0000000d) {
1619688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0000000d: {
1619788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a00e0d
1619888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000002) {
1619988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
1620088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf9a00e0d
1620188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_7_Decode(
1620288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 6) & 0x3);
1620388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
1620488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1620588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1620688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1620788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned first =
1620888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
1620988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned length;
1621088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          SpacingType spacing;
1621188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch ((instr >> 5) & 0x1) {
1621288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            default:
1621388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              VIXL_UNREACHABLE_OR_FALLTHROUGH();
1621488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x0:
1621588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              length = 3;
1621688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing = kSingle;
1621788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
1621888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x1:
1621988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              length = 3;
1622088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing = kDouble;
1622188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
1622288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1622388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned last =
1622488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              first +
1622588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (length - 1) *
1622688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (spacing == kSingle ? 1 : 2);
1622788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          TransferType transfer = kAllLanes;
1622888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
16229d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>]! ; T1 NOLINT(whitespace/line_length)
1623088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vld3(CurrentCond(),
1623188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
1623288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               NeonRegisterList(DRegister(
1623388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    first),
1623488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                DRegister(last),
1623588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                spacing,
1623688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                transfer),
1623788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               MemOperand(Register(rn),
1623888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          PreIndex));
1623988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1624088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1624188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000002: {
1624288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf9a00e0f
1624388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_7_Decode(
1624488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 6) & 0x3);
1624588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
1624688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1624788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1624888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1624988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned first =
1625088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
1625188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned length;
1625288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          SpacingType spacing;
1625388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch ((instr >> 5) & 0x1) {
1625488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            default:
1625588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              VIXL_UNREACHABLE_OR_FALLTHROUGH();
1625688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x0:
1625788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              length = 3;
1625888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing = kSingle;
1625988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
1626088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x1:
1626188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              length = 3;
1626288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing = kDouble;
1626388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
1626488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1626588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned last =
1626688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              first +
1626788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (length - 1) *
1626888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (spacing == kSingle ? 1 : 2);
1626988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          TransferType transfer = kAllLanes;
1627088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
16271d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>] ; T1 NOLINT(whitespace/line_length)
1627288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vld3(CurrentCond(),
1627388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
1627488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               NeonRegisterList(DRegister(
1627588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    first),
1627688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                DRegister(last),
1627788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                spacing,
1627888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                transfer),
1627988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               MemOperand(Register(rn),
1628088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          Offset));
1628188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1628288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1628388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1628488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1628588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1628688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default: {
1628788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xd) == 0xd)) {
1628888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1628988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1629088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1629188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1629288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 6) & 0x3);
1629388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1629488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1629588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1629688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1629788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1629888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1629988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
1630088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing;
1630188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 5) & 0x1) {
1630288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
1630388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
1630488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
1630588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 3;
1630688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kSingle;
1630788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1630888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
1630988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 3;
1631088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kDouble;
1631188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1631288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1631388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1631488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1631588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1631688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1631788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kAllLanes;
1631888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1631988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Sign sign(plus);
1632088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm = instr & 0xf;
16321d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>], #<Rm> ; T1 NOLINT(whitespace/line_length)
1632288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld3(CurrentCond(),
1632388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1632488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1632588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1632688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1632788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
1632888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           MemOperand(Register(rn),
1632988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      sign,
1633088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      Register(rm),
1633188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      PostIndex));
1633288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1633388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1633488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1633588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1633688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
163374339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1633888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1633988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1634088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1634188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1634288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1634388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1634488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1634588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1634688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9a0020d
1634788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1634888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1634988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a0020d
1635088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1635188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1635288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1635388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1635488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1635588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1635688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1635788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1635888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1635988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1636088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeon decode_neon =
1636188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Index_1_Decode((instr >> 4) & 0xf,
1636288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         dt);
1636388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1636488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1636588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1636688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1636788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1636888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1636988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1637088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1637188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1637288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 3;
1637388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1637488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1637588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1637688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1637788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
16378d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>]! ; T1 NOLINT(whitespace/line_length)
1637988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld3(CurrentCond(),
1638088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1638188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1638288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1638388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1638488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1638588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           MemOperand(Register(rn), PreIndex));
1638688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1638788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1638888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1638988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a0020f
1639088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1639188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1639288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1639388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1639488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1639588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1639688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1639788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1639888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1639988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1640088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeon decode_neon =
1640188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Index_1_Decode((instr >> 4) & 0xf,
1640288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         dt);
1640388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1640488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1640588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1640688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1640788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1640888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1640988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1641088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1641188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1641288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 3;
1641388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1641488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1641588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1641688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1641788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1641888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>] ; T1
1641988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld3(CurrentCond(),
1642088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1642188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1642288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1642388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1642488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1642588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           MemOperand(Register(rn), Offset));
1642688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1642788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1642888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1642988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1643088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1643188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1643288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xc00) == 0xc00) ||
1643388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xd) == 0xd)) {
1643488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1643588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1643688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1643788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1643888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 10) & 0x3);
1643988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1644088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1644188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1644288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1644388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DecodeNeon decode_neon =
1644488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Index_1_Decode((instr >> 4) & 0xf, dt);
1644588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (!decode_neon.IsValid()) {
1644688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1644788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1644888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1644988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane = decode_neon.GetLane();
1645088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing =
1645188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      decode_neon.GetSpacing();
1645288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1645388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1645488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length = 3;
1645588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1645688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1645788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1645888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1645988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1646088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Sign sign(plus);
1646188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
16462d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>], #<Rm> ; T1 NOLINT(whitespace/line_length)
1646388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld3(CurrentCond(),
1646488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1646588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1646688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1646788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1646888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        lane),
1646988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
1647088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign,
1647188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Register(rm),
1647288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  PostIndex));
1647388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1647488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1647588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1647688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1647788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1647888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1647988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1648088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1648188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000300: {
1648288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9a00300
1648388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c00) {
1648488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
1648588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf9a00f00
1648688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1648788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1648888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9a00f0d
1648988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1649088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1649188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a00f0d
1649288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1649388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_8_Decode((instr >> 6) & 0x3);
1649488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1649588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1649688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1649788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1649888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align =
1649988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_a_3_Decode((instr >> 4) & 0x1,
1650088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt,
1650188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 6) & 0x3);
1650288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid) ||
1650388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          align.Is(kBadAlignment)) {
1650488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1650588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1650688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1650788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1650888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1650988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
1651088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing;
1651188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 5) & 0x1) {
1651288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
1651388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
1651488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
1651588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 4;
1651688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kSingle;
1651788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1651888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
1651988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 4;
1652088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kDouble;
1652188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1652288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1652388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1652488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1652588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1652688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1652788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kAllLanes;
1652888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
16529d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1653088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld4(CurrentCond(),
1653188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1653288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1653388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1653488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1653588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
1653688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1653788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1653888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1653988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1654088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1654188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1654288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a00f0f
1654388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1654488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_8_Decode((instr >> 6) & 0x3);
1654588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1654688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1654788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1654888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1654988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align =
1655088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_a_3_Decode((instr >> 4) & 0x1,
1655188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt,
1655288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 6) & 0x3);
1655388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid) ||
1655488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          align.Is(kBadAlignment)) {
1655588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1655688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1655788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1655888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1655988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1656088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
1656188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing;
1656288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 5) & 0x1) {
1656388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
1656488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
1656588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
1656688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 4;
1656788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kSingle;
1656888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1656988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
1657088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 4;
1657188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          spacing = kDouble;
1657288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1657388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1657488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1657588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1657688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1657788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1657888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kAllLanes;
1657988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
16580d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1658188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld4(CurrentCond(),
1658288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1658388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1658488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1658588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1658688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
1658788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1658888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1658988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1659088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1659188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1659288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1659388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1659488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1659588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1659688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xd) == 0xd)) {
1659788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1659888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1659988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1660088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1660188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_8_Decode((instr >> 6) & 0x3);
1660288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1660388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1660488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1660588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1660688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align =
1660788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_a_3_Decode((instr >> 4) & 0x1,
1660888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
1660988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       (instr >> 6) & 0x3);
1661088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid) ||
1661188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      align.Is(kBadAlignment)) {
1661288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1661388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1661488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1661588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1661688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1661788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length;
1661888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing;
1661988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch ((instr >> 5) & 0x1) {
1662088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
1662188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      VIXL_UNREACHABLE_OR_FALLTHROUGH();
1662288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
1662388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1662488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kSingle;
1662588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1662688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
1662788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      length = 4;
1662888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      spacing = kDouble;
1662988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1663088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1663188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1663288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1663388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1663488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1663588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  TransferType transfer = kAllLanes;
1663688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1663788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
16638d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1663988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld4(CurrentCond(),
1664088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1664188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1664288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1664388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1664488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        transfer),
1664588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1664688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1664788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1664888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1664988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1665088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1665188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1665288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1665388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1665488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1665588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000000d) {
1665688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000000d: {
1665788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9a0030d
1665888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000002) {
1665988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1666088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a0030d
1666188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1666288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1666388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1666488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1666588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1666688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1666788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1666888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1666988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1667088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1667188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1667288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_3_Decode((instr >>
1667388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1667488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1667588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1667688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1667788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1667888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1667988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1668088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1668188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1668288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1668388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1668488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1668588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1668688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 4;
1668788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1668888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1668988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1669088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1669188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
16692d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; T1 NOLINT(whitespace/line_length)
1669388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld4(CurrentCond(),
1669488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1669588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1669688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1669788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1669888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1669988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1670088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1670188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             PostIndex));
1670288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1670388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1670488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000002: {
1670588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9a0030f
1670688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xc00) == 0xc00)) {
1670788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1670888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1670988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1671088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
1671188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_7_Decode((instr >> 10) & 0x3);
1671288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
1671388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1671488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1671588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1671688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DecodeNeonAndAlign decode_neon =
1671788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Align_index_align_3_Decode((instr >>
1671888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      4) &
1671988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                         0xf,
1672088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     dt);
1672188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (!decode_neon.IsValid()) {
1672288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1672388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1672488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1672588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Alignment align = decode_neon.GetAlign();
1672688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane = decode_neon.GetLane();
1672788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing =
1672888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          decode_neon.GetSpacing();
1672988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
1673088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
1673188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length = 4;
1673288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last =
1673388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          first +
1673488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (length - 1) *
1673588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (spacing == kSingle ? 1 : 2);
1673688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
16737d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; T1 NOLINT(whitespace/line_length)
1673888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vld4(CurrentCond(),
1673988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
1674088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
1674188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
1674288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
1674388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            lane),
1674488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           AlignedMemOperand(Register(rn),
1674588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             align,
1674688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1674788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1674888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1674988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1675088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1675188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1675288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1675388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xc00) == 0xc00) ||
1675488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xd) == 0xd)) {
1675588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1675688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1675788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1675888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
1675988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_7_Decode((instr >> 10) & 0x3);
1676088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
1676188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1676288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1676388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1676488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DecodeNeonAndAlign decode_neon =
1676588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Align_index_align_3_Decode((instr >> 4) &
1676688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     0xf,
1676788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 dt);
1676888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (!decode_neon.IsValid()) {
1676988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1677088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1677188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1677288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Alignment align = decode_neon.GetAlign();
1677388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane = decode_neon.GetLane();
1677488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  SpacingType spacing =
1677588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      decode_neon.GetSpacing();
1677688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
1677788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
1677888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned length = 4;
1677988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned last =
1678088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      first +
1678188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (length - 1) *
1678288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (spacing == kSingle ? 1 : 2);
1678388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1678488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
16785d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; T1 NOLINT(whitespace/line_length)
1678688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vld4(CurrentCond(),
1678788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
1678888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       NeonRegisterList(DRegister(first),
1678988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        DRegister(last),
1679088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        spacing,
1679188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        lane),
1679288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       AlignedMemOperand(Register(rn),
1679388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         align,
1679488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1679588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         PostIndex));
1679688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1679788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1679888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1679988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1680088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1680188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1680288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1680388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1680488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1680588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1680688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1680788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1680888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1680988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1681088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x10100000: {
1681188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xf8100000
1681288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x01400000) {
1681388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1681488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf8100000
1681588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
1681688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
1681788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf81f0000
1681888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x0000f000) {
1681988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x0000f000: {
1682088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf81ff000
1682188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t U = (instr >> 23) & 0x1;
1682288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t imm = instr & 0xfff;
1682388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (U == 0) imm = -imm;
1682488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              bool minus_zero = (imm == 0) && (U == 0);
1682588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Label label(imm, kT32PcDelta, minus_zero);
1682688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // PLD{<c>}{<q>} <label> ; T1
1682788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              pld(CurrentCond(), &label);
1682888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xff7ff000) != 0xf81ff000)) {
1682988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1683088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1683188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1683288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1683388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1683488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00200000) {
1683588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1683688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf81f0000
1683788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf000) == 0xf000)) {
1683888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1683988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1684088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1684188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1684288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t U = (instr >> 23) & 0x1;
1684388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t imm = instr & 0xfff;
1684488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (U == 0) imm = -imm;
1684588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  bool minus_zero = (imm == 0) && (U == 0);
1684688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Label label(imm, kT32PcDelta, minus_zero);
1684788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDRB{<c>}{<q>} <Rt>, <label> ; T1
1684888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrb(CurrentCond(), Register(rt), &label);
1684988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1685088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1685188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00200000: {
1685288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf83f0000
1685388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf000) == 0xf000)) {
1685488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1685588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1685688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1685788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1685888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t U = (instr >> 23) & 0x1;
1685988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t imm = instr & 0xfff;
1686088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (U == 0) imm = -imm;
1686188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  bool minus_zero = (imm == 0) && (U == 0);
1686288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Label label(imm, kT32PcDelta, minus_zero);
1686388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDRH{<c>}{<q>} <Rt>, <label> ; T1
1686488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrh(CurrentCond(), Register(rt), &label);
1686588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1686688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1686788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1686888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1686988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1687088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1687188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1687288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1687388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1687488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00a00000) {
1687588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
1687688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8100000
1687788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000d00) {
1687888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1687988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8100000
1688088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x000002c0) {
1688188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1688288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8100000
1688388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x0000f000) {
1688488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0000f000: {
1688588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf810f000
1688688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000)) {
1688788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1688888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1688988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1689088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1689188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Sign sign(plus);
1689288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm = instr & 0xf;
1689388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Shift shift = LSL;
1689488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t amount = (instr >> 4) & 0x3;
1689588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          AddrMode addrmode = Offset;
16896d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // PLD{<c>}{<q>} [<Rn>, {+}<Rm>{, LSL #<amount>}] ; T1 NOLINT(whitespace/line_length)
1689788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          pld(CurrentCond(),
1689888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              MemOperand(Register(rn),
1689988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         sign,
1690088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1690188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         shift,
1690288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         amount,
1690388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         addrmode));
1690488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1690588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1690688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
1690788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000) ||
1690888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xf000) == 0xf000)) {
1690988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1691088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1691188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1691288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rt = (instr >> 12) & 0xf;
1691388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1691488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Sign sign(plus);
1691588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm = instr & 0xf;
1691688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Shift shift = LSL;
1691788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t amount = (instr >> 4) & 0x3;
1691888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          AddrMode addrmode = Offset;
1691988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((rt < kNumberOfT32LowRegisters) &&
1692088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (rn < kNumberOfT32LowRegisters) &&
1692188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (rm < kNumberOfT32LowRegisters) &&
1692288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              shift.IsLSL() && (amount == 0) &&
1692388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign.IsPlus()) {
16924d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // LDRB{<c>}.W <Rt>, [<Rn>, #{+}<Rm>] ; T2 NOLINT(whitespace/line_length)
1692588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ldrb(CurrentCond(),
1692688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Wide,
1692788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Register(rt),
1692888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 MemOperand(Register(rn),
1692988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            sign,
1693088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            Register(rm),
1693188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            addrmode));
1693288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
16933d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // LDRB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>{, LSL #<imm>}] ; T2 NOLINT(whitespace/line_length)
1693488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ldrb(CurrentCond(),
1693588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Best,
1693688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Register(rt),
1693788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 MemOperand(Register(rn),
1693888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            sign,
1693988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            Register(rm),
1694088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            shift,
1694188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            amount,
1694288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            addrmode));
1694388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1694488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1694588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1694688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1694788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1694888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
169494339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
1695088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
1695188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1695288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1695388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1695488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1695588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000900: {
1695688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8100900
1695788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
1695888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1695988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1696088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1696188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1696288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1696388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Sign sign((((instr >> 9) & 0x1) == 0) ? minus
1696488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        : plus);
1696588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xff;
16966d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // LDRB{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_2> ; T3 NOLINT(whitespace/line_length)
1696788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrb(CurrentCond(),
1696888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1696988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
1697088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
1697188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign,
1697288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  offset,
1697388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  PostIndex));
1697488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1697588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1697688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000c00: {
1697788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8100c00
1697888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000200) {
1697988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1698088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8100c00
1698188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x0000f000) {
1698288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0000f000: {
1698388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf810fc00
1698488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000)) {
1698588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1698688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1698788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1698888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1698988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          int32_t offset = instr & 0xff;
16990d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // PLD{<c>}{<q>} [<Rn>{, #-<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1699188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          pld(CurrentCond(),
1699288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              MemOperand(Register(rn),
1699388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         minus,
1699488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         offset,
1699588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1699688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1699788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1699888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
1699988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000) ||
1700088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xf000) == 0xf000)) {
1700188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1700288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1700388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1700488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rt = (instr >> 12) & 0xf;
1700588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1700688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          int32_t offset = instr & 0xff;
17007d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // LDRB{<c>}{<q>} <Rt>, [<Rn>{, #-<imm_2>}] ; T3 NOLINT(whitespace/line_length)
1700888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ldrb(CurrentCond(),
1700988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Best,
1701088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rt),
1701188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               MemOperand(Register(rn),
1701288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          minus,
1701388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          offset,
1701488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          Offset));
1701588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1701688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1701788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1701888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1701988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1702088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000200: {
1702188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8100e00
1702288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1702388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1702488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1702588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1702688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnimplementedT32_32("LDRBT", instr);
1702788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1702888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1702988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1703088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1703188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1703288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000d00: {
1703388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8100d00
1703488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
1703588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1703688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1703788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1703888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1703988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1704088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Sign sign((((instr >> 9) & 0x1) == 0) ? minus
1704188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        : plus);
1704288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xff;
17043d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // LDRB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}]! ; T3 NOLINT(whitespace/line_length)
1704488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrb(CurrentCond(),
1704588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1704688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
1704788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
1704888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign,
1704988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  offset,
1705088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  PreIndex));
1705188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1705288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
170534339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1705488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1705588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1705688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1705788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1705888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1705988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
1706088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8300000
1706188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000d00) {
1706288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1706388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8300000
1706488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x000002c0) {
1706588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1706688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8300000
1706788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x0000f000) {
1706888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0000f000: {
1706988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf830f000
1707088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000)) {
1707188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1707288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1707388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1707488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1707588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Sign sign(plus);
1707688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm = instr & 0xf;
1707788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Shift shift = LSL;
1707888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t amount = (instr >> 4) & 0x3;
1707988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          AddrMode addrmode = Offset;
17080d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // PLDW{<c>}{<q>} [<Rn>, {+}<Rm>{, LSL #<amount>}] ; T1 NOLINT(whitespace/line_length)
1708188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          pldw(CurrentCond(),
1708288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               MemOperand(Register(rn),
1708388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          sign,
1708488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          Register(rm),
1708588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          shift,
1708688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          amount,
1708788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          addrmode));
1708888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1708988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1709088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
1709188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000) ||
1709288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xf000) == 0xf000)) {
1709388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1709488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1709588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1709688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rt = (instr >> 12) & 0xf;
1709788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1709888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Sign sign(plus);
1709988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm = instr & 0xf;
1710088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Shift shift = LSL;
1710188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t amount = (instr >> 4) & 0x3;
1710288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          AddrMode addrmode = Offset;
1710388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((rt < kNumberOfT32LowRegisters) &&
1710488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (rn < kNumberOfT32LowRegisters) &&
1710588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (rm < kNumberOfT32LowRegisters) &&
1710688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              shift.IsLSL() && (amount == 0) &&
1710788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign.IsPlus()) {
17108d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // LDRH{<c>}.W <Rt>, [<Rn>, #{+}<Rm>] ; T2 NOLINT(whitespace/line_length)
1710988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ldrh(CurrentCond(),
1711088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Wide,
1711188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Register(rt),
1711288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 MemOperand(Register(rn),
1711388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            sign,
1711488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            Register(rm),
1711588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            addrmode));
1711688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
17117d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // LDRH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>{, LSL #<imm>}] ; T2 NOLINT(whitespace/line_length)
1711888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ldrh(CurrentCond(),
1711988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Best,
1712088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Register(rt),
1712188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 MemOperand(Register(rn),
1712288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            sign,
1712388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            Register(rm),
1712488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            shift,
1712588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            amount,
1712688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            addrmode));
1712788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1712888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1712988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1713088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1713188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1713288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
171334339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
1713488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
1713588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1713688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1713788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1713888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1713988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000900: {
1714088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8300900
1714188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
1714288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1714388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1714488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1714588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1714688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1714788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Sign sign((((instr >> 9) & 0x1) == 0) ? minus
1714888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        : plus);
1714988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xff;
17150d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // LDRH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_2> ; T3 NOLINT(whitespace/line_length)
1715188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrh(CurrentCond(),
1715288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1715388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
1715488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
1715588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign,
1715688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  offset,
1715788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  PostIndex));
1715888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1715988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1716088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000c00: {
1716188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8300c00
1716288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000200) {
1716388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1716488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8300c00
1716588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x0000f000) {
1716688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0000f000: {
1716788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf830fc00
1716888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000)) {
1716988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1717088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1717188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1717288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1717388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          int32_t offset = instr & 0xff;
17174d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // PLDW{<c>}{<q>} [<Rn>{, #-<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1717588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          pldw(CurrentCond(),
1717688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               MemOperand(Register(rn),
1717788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          minus,
1717888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          offset,
1717988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          Offset));
1718088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1718188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1718288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
1718388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000) ||
1718488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xf000) == 0xf000)) {
1718588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1718688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1718788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1718888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rt = (instr >> 12) & 0xf;
1718988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1719088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          int32_t offset = instr & 0xff;
17191d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // LDRH{<c>}{<q>} <Rt>, [<Rn>{, #-<imm_2>}] ; T3 NOLINT(whitespace/line_length)
1719288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ldrh(CurrentCond(),
1719388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Best,
1719488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rt),
1719588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               MemOperand(Register(rn),
1719688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          minus,
1719788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          offset,
1719888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          Offset));
1719988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1720088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1720188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1720288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1720388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1720488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000200: {
1720588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8300e00
1720688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1720788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1720888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1720988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1721088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnimplementedT32_32("LDRHT", instr);
1721188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1721288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1721388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1721488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1721588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1721688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000d00: {
1721788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8300d00
1721888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
1721988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1722088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1722188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1722288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1722388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1722488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Sign sign((((instr >> 9) & 0x1) == 0) ? minus
1722588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        : plus);
1722688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xff;
17227d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // LDRH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}]! ; T3 NOLINT(whitespace/line_length)
1722888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrh(CurrentCond(),
1722988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1723088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
1723188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
1723288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign,
1723388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  offset,
1723488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  PreIndex));
1723588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1723688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
172374339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
1723888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
1723988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1724088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1724188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1724288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1724388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800000: {
1724488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8900000
1724588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000f000) {
1724688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000f000: {
1724788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf890f000
1724888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
1724988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1725088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1725188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1725288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1725388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xfff;
1725488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // PLD{<c>}{<q>} [<Rn>{, #{+}<imm>}] ; T1
1725588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  pld(CurrentCond(),
1725688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      MemOperand(Register(rn),
1725788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 plus,
1725888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 offset,
1725988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Offset));
1726088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1726188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1726288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1726388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000) ||
1726488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf000) == 0xf000)) {
1726588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1726688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1726788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1726888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1726988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1727088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xfff;
1727188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((rt < kNumberOfT32LowRegisters) &&
1727288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (rn < kNumberOfT32LowRegisters) &&
1727388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((offset >= 0) && (offset <= 31))) {
17274d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // LDRB{<c>}.W <Rt>, [<Rn>{, #{+}<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1727588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ldrb(CurrentCond(),
1727688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Wide,
1727788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1727888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn),
1727988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    plus,
1728088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    offset,
1728188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    Offset));
1728288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
17283d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // LDRB{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1728488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ldrb(CurrentCond(),
1728588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Best,
1728688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1728788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn),
1728888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    plus,
1728988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    offset,
1729088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    Offset));
1729188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1729288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1729388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1729488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1729588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1729688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1729788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00a00000: {
1729888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf8b00000
1729988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000f000) {
1730088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000f000: {
1730188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8b0f000
1730288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
1730388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1730488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1730588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1730688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1730788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xfff;
1730888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // PLDW{<c>}{<q>} [<Rn>{, #{+}<imm>}] ; T1
1730988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  pldw(CurrentCond(),
1731088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
1731188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  plus,
1731288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  offset,
1731388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Offset));
1731488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1731588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1731688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1731788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000) ||
1731888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf000) == 0xf000)) {
1731988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1732088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1732188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1732288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1732388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1732488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xfff;
1732588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((rt < kNumberOfT32LowRegisters) &&
1732688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (rn < kNumberOfT32LowRegisters) &&
1732788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((offset >= 0) && (offset <= 62) &&
1732888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ((offset & 1) == 0))) {
17329d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // LDRH{<c>}.W <Rt>, [<Rn>{, #{+}<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1733088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ldrh(CurrentCond(),
1733188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Wide,
1733288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1733388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn),
1733488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    plus,
1733588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    offset,
1733688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    Offset));
1733788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
17338d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // LDRH{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1733988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ldrh(CurrentCond(),
1734088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Best,
1734188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt),
1734288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn),
1734388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    plus,
1734488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    offset,
1734588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    Offset));
1734688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1734788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1734888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1734988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1735088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1735188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1735288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1735388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1735488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1735588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1735688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1735788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1735888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
1735988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf8500000
1736088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00200000) {
1736188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1736288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf8500000
1736388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
1736488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
1736588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf85f0000
1736688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1736788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t U = (instr >> 23) & 0x1;
1736888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t imm = instr & 0xfff;
1736988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (U == 0) imm = -imm;
1737088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              bool minus_zero = (imm == 0) && (U == 0);
1737188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Label label(imm, kT32PcDelta, minus_zero);
1737288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((imm >= -4095) && (imm <= 4095) &&
1737388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rt < kNumberOfT32LowRegisters) &&
1737488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (imm >= 0) && (imm <= 1020) &&
1737588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   ((imm & 3) == 0))) {
1737688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // LDR{<c>}.W <Rt>, <label> ; T2
1737788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ldr(CurrentCond(), Wide, Register(rt), &label);
1737888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1737988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // LDR{<c>}{<q>} <Rt>, <label> ; T2
1738088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ldr(CurrentCond(), Best, Register(rt), &label);
1738188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1738288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1738388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1738488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1738588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00800000) {
1738688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1738788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8500000
1738888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000d00) {
1738988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1739088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8500000
1739188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x000002c0) == 0x00000000) {
1739288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0xf0000) == 0xf0000)) {
1739388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
1739488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
1739588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1739688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rt = (instr >> 12) & 0xf;
1739788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rn = (instr >> 16) & 0xf;
1739888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Sign sign(plus);
1739988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm = instr & 0xf;
1740088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Shift shift = LSL;
1740188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t amount = (instr >> 4) & 0x3;
1740288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        AddrMode addrmode = Offset;
1740388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if ((rt < kNumberOfT32LowRegisters) &&
1740488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (rn < kNumberOfT32LowRegisters) &&
1740588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (rm < kNumberOfT32LowRegisters) &&
1740688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift.IsLSL() && (amount == 0) &&
1740788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign.IsPlus()) {
17408d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // LDR{<c>}.W <Rt>, [<Rn>, #{+}<Rm>] ; T2 NOLINT(whitespace/line_length)
1740988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ldr(CurrentCond(),
1741088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Wide,
1741188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rt),
1741288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              MemOperand(Register(rn),
1741388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         sign,
1741488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1741588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         addrmode));
1741688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        } else {
17417d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // LDR{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>{, LSL #<imm>}] ; T2 NOLINT(whitespace/line_length)
1741888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ldr(CurrentCond(),
1741988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Best,
1742088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rt),
1742188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              MemOperand(Register(rn),
1742288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         sign,
1742388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Register(rm),
1742488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         shift,
1742588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         amount,
1742688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         addrmode));
1742788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1742888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
1742988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1743088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1743188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1743288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1743388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000900: {
1743488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8500900
1743588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1743688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1743788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1743888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1743988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((Uint32((instr >> 16)) &
1744088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Uint32(0xf)) == Uint32(0xd)) &&
1744188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((Uint32((instr >> 9)) &
1744288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Uint32(0x1)) == Uint32(0x1)) &&
1744388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((Uint32(instr) & Uint32(0xff)) ==
1744488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           Uint32(0x4))) {
1744588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rt = (instr >> 12) & 0xf;
1744688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if ((rt <= 7) || (rt == kPCRegNum)) {
17447d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // POP{<c>}.W <single_register_list> ; T4 NOLINT(whitespace/line_length)
1744888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          pop(CurrentCond(),
1744988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Wide,
1745088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rt));
1745188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        } else {
17452d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // POP{<c>}{<q>} <single_register_list> ; T4 NOLINT(whitespace/line_length)
1745388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          pop(CurrentCond(),
1745488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Best,
1745588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rt));
1745688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1745788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1745888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1745988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rt = (instr >> 12) & 0xf;
1746088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1746188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Sign sign((((instr >> 9) & 0x1) == 0)
1746288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ? minus
1746388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    : plus);
1746488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int32_t offset = instr & 0xff;
17465d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // LDR{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_2> ; T4 NOLINT(whitespace/line_length)
1746688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ldr(CurrentCond(),
1746788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Best,
1746888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Register(rt),
1746988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          MemOperand(Register(rn),
1747088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     sign,
1747188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     offset,
1747288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PostIndex));
1747388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1747488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1747588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000c00: {
1747688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8500c00
1747788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000200) {
1747888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
1747988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf8500c00
1748088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000)) {
1748188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1748288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1748388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1748488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rt = (instr >> 12) & 0xf;
1748588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1748688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          int32_t offset = instr & 0xff;
17487d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // LDR{<c>}{<q>} <Rt>, [<Rn>{, #-<imm_2>}] ; T4 NOLINT(whitespace/line_length)
1748888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ldr(CurrentCond(),
1748988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Best,
1749088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Register(rt),
1749188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              MemOperand(Register(rn),
1749288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         minus,
1749388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         offset,
1749488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         Offset));
1749588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1749688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1749788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000200: {
1749888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf8500e00
1749988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000)) {
1750088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1750188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1750288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1750388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnimplementedT32_32("LDRT", instr);
1750488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1750588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1750688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1750788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1750888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1750988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000d00: {
1751088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf8500d00
1751188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1751288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1751388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1751488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1751588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rt = (instr >> 12) & 0xf;
1751688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1751788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Sign sign((((instr >> 9) & 0x1) == 0)
1751888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ? minus
1751988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    : plus);
1752088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int32_t offset = instr & 0xff;
17521d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // LDR{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}]! ; T4 NOLINT(whitespace/line_length)
1752288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ldr(CurrentCond(),
1752388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Best,
1752488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Register(rt),
1752588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          MemOperand(Register(rn),
1752688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     sign,
1752788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     offset,
1752888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     PreIndex));
1752988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1753088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
175314339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
1753288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
1753388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1753488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1753588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1753688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1753788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00800000: {
1753888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf8d00000
1753988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
1754088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1754188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1754288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1754388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1754488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1754588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xfff;
1754688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((rt < kNumberOfT32LowRegisters) &&
1754788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       (rn < kNumberOfT32LowRegisters) &&
1754888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ((offset >= 0) && (offset <= 124) &&
1754988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((offset & 3) == 0))) ||
1755088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((rt < kNumberOfT32LowRegisters) &&
1755188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       (rn == sp.GetCode()) &&
1755288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       ((offset >= 0) && (offset <= 1020) &&
1755388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((offset & 3) == 0)))) {
17554d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // LDR{<c>}.W <Rt>, [<Rn>{, #{+}<imm_1>}] ; T3 NOLINT(whitespace/line_length)
1755588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ldr(CurrentCond(),
1755688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Wide,
1755788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Register(rt),
1755888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        MemOperand(Register(rn),
1755988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   plus,
1756088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   offset,
1756188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
1756288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
17563d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // LDR{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm_1>}] ; T3 NOLINT(whitespace/line_length)
1756488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ldr(CurrentCond(),
1756588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Best,
1756688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Register(rt),
1756788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        MemOperand(Register(rn),
1756888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   plus,
1756988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   offset,
1757088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
1757188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1757288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1757388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1757488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1757588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1757688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1757788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1757888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1757988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
175804339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                        default:
1758188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
1758288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1758388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1758488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1758588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1758688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x01000000: {
1758788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xf9100000
1758888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00200000) {
1758988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1759088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9100000
1759188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
1759288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
1759388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf91f0000
1759488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x0000f000) {
1759588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0000f000: {
1759688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf91ff000
1759788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t U = (instr >> 23) & 0x1;
1759888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t imm = instr & 0xfff;
1759988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (U == 0) imm = -imm;
1760088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  bool minus_zero = (imm == 0) && (U == 0);
1760188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Label label(imm, kT32PcDelta, minus_zero);
1760288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // PLI{<c>}{<q>} <label> ; T3
1760388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  pli(CurrentCond(), &label);
1760488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1760588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1760688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1760788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf000) == 0xf000)) {
1760888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1760988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1761088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1761188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1761288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t U = (instr >> 23) & 0x1;
1761388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t imm = instr & 0xfff;
1761488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (U == 0) imm = -imm;
1761588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  bool minus_zero = (imm == 0) && (U == 0);
1761688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Label label(imm, kT32PcDelta, minus_zero);
1761788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LDRSB{<c>}{<q>} <Rt>, <label> ; T1
1761888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrsb(CurrentCond(), Register(rt), &label);
1761988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1762088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1762188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1762288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1762388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1762488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1762588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00800000) {
1762688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1762788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9100000
1762888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000d00) {
1762988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1763088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9100000
1763188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x000002c0) {
1763288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
1763388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf9100000
1763488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x0000f000) {
1763588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x0000f000: {
1763688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xf910f000
1763788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0xf0000) ==
1763888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0xf0000)) {
1763988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
1764088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
1764188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
1764288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rn = (instr >> 16) & 0xf;
1764388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Sign sign(plus);
1764488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm = instr & 0xf;
1764588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Shift shift = LSL;
1764688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t amount =
1764788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 4) & 0x3;
1764888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              AddrMode addrmode = Offset;
17649d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // PLI{<c>}{<q>} [<Rn>, {+}<Rm>{, LSL #<amount>}] ; T1 NOLINT(whitespace/line_length)
1765088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              pli(CurrentCond(),
1765188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  MemOperand(Register(rn),
1765288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             sign,
1765388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Register(rm),
1765488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             shift,
1765588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             amount,
1765688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             addrmode));
1765788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
1765888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
1765988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            default: {
1766088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0xf0000) ==
1766188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0xf0000) ||
1766288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0xf000) ==
1766388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0xf000)) {
1766488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
1766588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
1766688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
1766788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rt = (instr >> 12) & 0xf;
1766888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rn = (instr >> 16) & 0xf;
1766988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Sign sign(plus);
1767088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm = instr & 0xf;
1767188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Shift shift = LSL;
1767288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t amount =
1767388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 4) & 0x3;
1767488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              AddrMode addrmode = Offset;
1767588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((rt <
1767688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   kNumberOfT32LowRegisters) &&
1767788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (rn <
1767888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   kNumberOfT32LowRegisters) &&
1767988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (rm <
1768088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   kNumberOfT32LowRegisters) &&
1768188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  shift.IsLSL() &&
1768288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (amount == 0) &&
1768388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign.IsPlus()) {
17684d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                // LDRSB{<c>}.W <Rt>, [<Rn>, #{+}<Rm>] ; T2 NOLINT(whitespace/line_length)
1768588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ldrsb(CurrentCond(),
1768688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      Wide,
1768788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      Register(rt),
1768888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      MemOperand(Register(rn),
1768988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 sign,
1769088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 Register(rm),
1769188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 addrmode));
1769288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              } else {
17693d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                // LDRSB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>{, LSL #<imm>}] ; T2 NOLINT(whitespace/line_length)
1769488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ldrsb(CurrentCond(),
1769588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      Best,
1769688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      Register(rt),
1769788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      MemOperand(Register(rn),
1769888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 sign,
1769988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 Register(rm),
1770088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 shift,
1770188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 amount,
1770288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 addrmode));
1770388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
1770488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
1770588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
1770688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1770788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1770888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
177094339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                        default:
1771088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
1771188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1771288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1771388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1771488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1771588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000900: {
1771688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9100900
1771788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1771888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1771988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1772088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1772188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rt = (instr >> 12) & 0xf;
1772288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1772388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Sign sign((((instr >> 9) & 0x1) == 0)
1772488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ? minus
1772588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    : plus);
1772688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int32_t offset = instr & 0xff;
17727d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // LDRSB{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_1> ; T2 NOLINT(whitespace/line_length)
1772888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ldrsb(CurrentCond(),
1772988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Best,
1773088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Register(rt),
1773188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            MemOperand(Register(rn),
1773288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       sign,
1773388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       offset,
1773488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
1773588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1773688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1773788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000c00: {
1773888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9100c00
1773988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000200) {
1774088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
1774188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf9100c00
1774288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x0000f000) {
1774388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x0000f000: {
1774488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xf910fc00
1774588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0xf0000) ==
1774688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0xf0000)) {
1774788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
1774888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
1774988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
1775088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rn = (instr >> 16) & 0xf;
1775188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              int32_t offset = instr & 0xff;
17752d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // PLI{<c>}{<q>} [<Rn>{, #-<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1775388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              pli(CurrentCond(),
1775488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  MemOperand(Register(rn),
1775588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             minus,
1775688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             offset,
1775788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             Offset));
1775888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
1775988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
1776088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            default: {
1776188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0xf0000) ==
1776288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0xf0000) ||
1776388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0xf000) ==
1776488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0xf000)) {
1776588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
1776688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
1776788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
1776888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rt = (instr >> 12) & 0xf;
1776988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rn = (instr >> 16) & 0xf;
1777088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              int32_t offset = instr & 0xff;
17771d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // LDRSB{<c>}{<q>} <Rt>, [<Rn>{, #-<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1777288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ldrsb(CurrentCond(),
1777388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    Best,
1777488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    Register(rt),
1777588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    MemOperand(Register(rn),
1777688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               minus,
1777788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               offset,
1777888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               Offset));
1777988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
1778088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
1778188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1778288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1778388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1778488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000200: {
1778588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf9100e00
1778688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000)) {
1778788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1778888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1778988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1779088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnimplementedT32_32("LDRSBT", instr);
1779188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1779288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1779388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1779488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1779588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1779688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000d00: {
1779788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9100d00
1779888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1779988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1780088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1780188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1780288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rt = (instr >> 12) & 0xf;
1780388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1780488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Sign sign((((instr >> 9) & 0x1) == 0)
1780588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ? minus
1780688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    : plus);
1780788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int32_t offset = instr & 0xff;
17808d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // LDRSB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_1>}]! ; T2 NOLINT(whitespace/line_length)
1780988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ldrsb(CurrentCond(),
1781088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Best,
1781188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Register(rt),
1781288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            MemOperand(Register(rn),
1781388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       sign,
1781488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       offset,
1781588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PreIndex));
1781688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1781788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
178184339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
1781988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
1782088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1782188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1782288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1782388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1782488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00800000: {
1782588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9900000
1782688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x0000f000) {
1782788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0000f000: {
1782888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf990f000
1782988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1783088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1783188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1783288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1783388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1783488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int32_t offset = instr & 0xfff;
1783588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // PLI{<c>}{<q>} [<Rn>{, #{+}<imm>}] ; T1
1783688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      pli(CurrentCond(),
1783788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          MemOperand(Register(rn),
1783888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     plus,
1783988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     offset,
1784088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     Offset));
1784188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1784288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1784388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default: {
1784488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000) ||
1784588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xf000) == 0xf000)) {
1784688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1784788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1784888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1784988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rt = (instr >> 12) & 0xf;
1785088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1785188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int32_t offset = instr & 0xfff;
17852d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // LDRSB{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm>}] ; T1 NOLINT(whitespace/line_length)
1785388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ldrsb(CurrentCond(),
1785488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Best,
1785588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Register(rt),
1785688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            MemOperand(Register(rn),
1785788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       plus,
1785888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       offset,
1785988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
1786088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1786188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1786288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1786388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1786488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1786588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1786688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1786788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1786888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1786988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1787088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1787188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00200000: {
1787288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xf9300000
1787388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
1787488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
1787588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xf93f0000
1787688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf000) == 0xf000)) {
1787788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1787888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1787988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1788088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
1788188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t U = (instr >> 23) & 0x1;
1788288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t imm = instr & 0xfff;
1788388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (U == 0) imm = -imm;
1788488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              bool minus_zero = (imm == 0) && (U == 0);
1788588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Label label(imm, kT32PcDelta, minus_zero);
1788688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // LDRSH{<c>}{<q>} <Rt>, <label> ; T1
1788788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ldrsh(CurrentCond(), Register(rt), &label);
1788888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1788988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1789088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1789188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00800000) {
1789288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
1789388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9300000
1789488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000d00) {
1789588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
1789688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9300000
1789788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x000002c0) == 0x00000000) {
1789888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0xf0000) == 0xf0000) ||
1789988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0xf000) == 0xf000)) {
1790088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
1790188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
1790288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1790388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rt = (instr >> 12) & 0xf;
1790488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rn = (instr >> 16) & 0xf;
1790588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Sign sign(plus);
1790688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm = instr & 0xf;
1790788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Shift shift = LSL;
1790888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t amount = (instr >> 4) & 0x3;
1790988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        AddrMode addrmode = Offset;
1791088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if ((rt < kNumberOfT32LowRegisters) &&
1791188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (rn < kNumberOfT32LowRegisters) &&
1791288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (rm < kNumberOfT32LowRegisters) &&
1791388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift.IsLSL() && (amount == 0) &&
1791488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign.IsPlus()) {
17915d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // LDRSH{<c>}.W <Rt>, [<Rn>, #{+}<Rm>] ; T2 NOLINT(whitespace/line_length)
1791688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ldrsh(CurrentCond(),
1791788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                Wide,
1791888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                Register(rt),
1791988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                MemOperand(Register(rn),
1792088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           sign,
1792188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           Register(rm),
1792288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           addrmode));
1792388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        } else {
17924d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // LDRSH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>{, LSL #<imm>}] ; T2 NOLINT(whitespace/line_length)
1792588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ldrsh(CurrentCond(),
1792688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                Best,
1792788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                Register(rt),
1792888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                MemOperand(Register(rn),
1792988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           sign,
1793088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           Register(rm),
1793188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           shift,
1793288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           amount,
1793388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           addrmode));
1793488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1793588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
1793688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1793788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1793888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1793988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1794088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000900: {
1794188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9300900
1794288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1794388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1794488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1794588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1794688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rt = (instr >> 12) & 0xf;
1794788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1794888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Sign sign((((instr >> 9) & 0x1) == 0)
1794988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ? minus
1795088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    : plus);
1795188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int32_t offset = instr & 0xff;
17952d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // LDRSH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_1> ; T2 NOLINT(whitespace/line_length)
1795388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ldrsh(CurrentCond(),
1795488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Best,
1795588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Register(rt),
1795688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            MemOperand(Register(rn),
1795788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       sign,
1795888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       offset,
1795988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
1796088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1796188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1796288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000c00: {
1796388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9300c00
1796488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000200) {
1796588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
1796688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf9300c00
1796788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000) ||
1796888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xf000) == 0xf000)) {
1796988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1797088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1797188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1797288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rt = (instr >> 12) & 0xf;
1797388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rn = (instr >> 16) & 0xf;
1797488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          int32_t offset = instr & 0xff;
17975d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // LDRSH{<c>}{<q>} <Rt>, [<Rn>{, #-<imm_1>}] ; T2 NOLINT(whitespace/line_length)
1797688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ldrsh(CurrentCond(),
1797788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                Best,
1797888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                Register(rt),
1797988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                MemOperand(Register(rn),
1798088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           minus,
1798188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           offset,
1798288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           Offset));
1798388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1798488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1798588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000200: {
1798688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xf9300e00
1798788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xf0000) == 0xf0000)) {
1798888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
1798988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
1799088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
1799188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnimplementedT32_32("LDRSHT", instr);
1799288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
1799388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
1799488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1799588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1799688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1799788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000d00: {
1799888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xf9300d00
1799988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xf0000) == 0xf0000)) {
1800088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
1800188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
1800288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
1800388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rt = (instr >> 12) & 0xf;
1800488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn = (instr >> 16) & 0xf;
1800588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Sign sign((((instr >> 9) & 0x1) == 0)
1800688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ? minus
1800788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    : plus);
1800888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int32_t offset = instr & 0xff;
18009d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // LDRSH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_1>}]! ; T2 NOLINT(whitespace/line_length)
1801088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ldrsh(CurrentCond(),
1801188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Best,
1801288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Register(rt),
1801388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            MemOperand(Register(rn),
1801488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       sign,
1801588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       offset,
1801688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PreIndex));
1801788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1801888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
180194339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
1802088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
1802188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
1802288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1802388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1802488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1802588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00800000: {
1802688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xf9b00000
1802788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000) ||
1802888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf000) == 0xf000)) {
1802988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1803088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1803188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1803288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
1803388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1803488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = instr & 0xfff;
18035d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // LDRSH{<c>}{<q>} <Rt>, [<Rn>{, #{+}<imm>}] ; T1 NOLINT(whitespace/line_length)
1803688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ldrsh(CurrentCond(),
1803788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Best,
1803888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Register(rt),
1803988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        MemOperand(Register(rn),
1804088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   plus,
1804188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   offset,
1804288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
1804388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1804488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1804588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1804688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1804788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1804888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1804988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1805088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1805188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1805288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1805388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
180544339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
1805588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
1805688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1805788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1805888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1805988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1806088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
1806188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
1806288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
1806388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x02000000: {
1806488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xea000000
1806588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x11900000) {
1806688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
1806788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xea000000
1806888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00600000) {
1806988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1807088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea000000
1807188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
1807288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
1807388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea000030
1807488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1807588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1807688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1807788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // AND{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1807888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          and_(CurrentCond(),
1807988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1808088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
1808188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
1808288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm), RRX));
1808388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xea000030)) {
1808488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1808588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1808688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1808788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1808888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1808988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
1809088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1809188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1809288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1809388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1809488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1809588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1809688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
1809788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
1809888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
1809988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
1810088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
1810188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00000000 &&
1810288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand.GetShift().IsLSL() &&
1810388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (shift_operand.GetAmount() == 0) &&
1810488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
1810588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rm < kNumberOfT32LowRegisters))) {
1810688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // AND<c>.W {<Rd>}, <Rn>, <Rm> ; T2
1810788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            and_(CurrentCond(),
1810888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
1810988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
1811088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
1811188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
1811288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xea000000)) {
1811388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1811488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1811588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1811688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
18117d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // AND{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1811888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            and_(CurrentCond(),
1811988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
1812088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
1812188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
1812288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Operand(Register(rm),
1812388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetType(),
1812488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetAmount()));
1812588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xea000000)) {
1812688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1812788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1812888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1812988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1813088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1813188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1813288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1813388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1813488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
1813588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea200000
1813688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
1813788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
1813888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea200030
1813988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1814088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1814188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1814288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // BIC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1814388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          bic(CurrentCond(),
1814488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
1814588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
1814688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
1814788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), RRX));
1814888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xea200030)) {
1814988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1815088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1815188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1815288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1815388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1815488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
1815588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1815688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1815788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1815888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1815988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1816088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1816188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
1816288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
1816388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
1816488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
1816588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
1816688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00000000 &&
1816788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand.GetShift().IsLSL() &&
1816888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (shift_operand.GetAmount() == 0) &&
1816988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
1817088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rm < kNumberOfT32LowRegisters))) {
1817188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // BIC<c>.W {<Rd>}, <Rn>, <Rm> ; T2
1817288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bic(CurrentCond(),
1817388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
1817488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1817588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1817688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
1817788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xea200000)) {
1817888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1817988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1818088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1818188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
18182d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // BIC{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1818388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bic(CurrentCond(),
1818488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
1818588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1818688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1818788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm),
1818888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetType(),
1818988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetAmount()));
1819088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xea200000)) {
1819188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1819288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1819388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1819488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1819588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1819688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1819788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1819888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1819988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
1820088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea400000
1820188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
1820288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
1820388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea4f0000
1820488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1820588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1820688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea4f0030
1820788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1820888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1820988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // RRX{<c>}{<q>} {<Rd>}, <Rm> ; T3
1821088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              rrx(CurrentCond(), Register(rd), Register(rm));
1821188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfffff0f0) != 0xea4f0030)) {
1821288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1821388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1821488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1821588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1821688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1821788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
1821888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1821988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1822088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1822188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 4)) & Uint32(0x3)) ==
1822288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x2))) {
1822388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
1822488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
1822588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t amount = ((instr >> 6) & 0x3) |
1822688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 10) & 0x1c);
1822788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (amount == 0) amount = 32;
1822888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (InITBlock() &&
1822988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((rd < kNumberOfT32LowRegisters) &&
1823088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     (rm < kNumberOfT32LowRegisters) &&
1823188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((amount >= 1) && (amount <= 32)))) {
1823288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // ASR<c>.W {<Rd>}, <Rm>, #<imm> ; T3
1823388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  asr(CurrentCond(),
1823488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Wide,
1823588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
1823688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rm),
1823788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      amount);
1823888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea4f0020)) {
1823988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1824088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1824188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
1824288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // ASR{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; T3
1824388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  asr(CurrentCond(),
1824488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Best,
1824588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
1824688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rm),
1824788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      amount);
1824888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea4f0020)) {
1824988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1825088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1825188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1825288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1825388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1825488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 4)) & Uint32(0x3)) ==
1825588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x0)) &&
1825688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x000070c0) != 0x00000000)) {
1825788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
1825888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
1825988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t amount = ((instr >> 6) & 0x3) |
1826088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 10) & 0x1c);
1826188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (InITBlock() &&
1826288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((rd < kNumberOfT32LowRegisters) &&
1826388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     (rm < kNumberOfT32LowRegisters) &&
1826488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((amount >= 1) && (amount <= 31)))) {
1826588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LSL<c>.W {<Rd>}, <Rm>, #<imm> ; T3
1826688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  lsl(CurrentCond(),
1826788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Wide,
1826888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
1826988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rm),
1827088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      amount);
1827188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea4f0000)) {
1827288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1827388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1827488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
1827588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LSL{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; T3
1827688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  lsl(CurrentCond(),
1827788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Best,
1827888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
1827988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rm),
1828088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      amount);
1828188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea4f0000)) {
1828288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1828388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1828488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1828588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1828688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1828788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 4)) & Uint32(0x3)) ==
1828888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x1))) {
1828988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
1829088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
1829188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t amount = ((instr >> 6) & 0x3) |
1829288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 10) & 0x1c);
1829388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (amount == 0) amount = 32;
1829488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (InITBlock() &&
1829588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((rd < kNumberOfT32LowRegisters) &&
1829688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     (rm < kNumberOfT32LowRegisters) &&
1829788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((amount >= 1) && (amount <= 32)))) {
1829888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LSR<c>.W {<Rd>}, <Rm>, #<imm> ; T3
1829988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  lsr(CurrentCond(),
1830088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Wide,
1830188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
1830288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rm),
1830388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      amount);
1830488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea4f0010)) {
1830588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1830688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1830788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
1830888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LSR{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; T3
1830988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  lsr(CurrentCond(),
1831088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Best,
1831188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
1831288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rm),
1831388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      amount);
1831488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea4f0010)) {
1831588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1831688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1831788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1831888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1831988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1832088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 4)) & Uint32(0x3)) ==
1832188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x3)) &&
1832288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x000070c0) != 0x00000000)) {
1832388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
1832488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
1832588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t amount = ((instr >> 6) & 0x3) |
1832688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 10) & 0x1c);
1832788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ROR{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; T3
1832888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ror(CurrentCond(),
1832988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
1833088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1833188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
1833288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    amount);
1833388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8030) != 0xea4f0030)) {
1833488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1833588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1833688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1833788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1833888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1833988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1834088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1834188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1834288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1834388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1834488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00100000) == 0x00000000 &&
1834588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetShift().IsLSL() &&
1834688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (shift_operand.GetAmount() == 0))) {
18347d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // MOV<c>.W <Rd>, <Rm> {, <shift> #<amount> } ; T3 NOLINT(whitespace/line_length)
1834888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                mov(CurrentCond(),
1834988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1835088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1835188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1835288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1835388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1835488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea4f0000)) {
1835588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1835688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1835788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else if (InITBlock() &&
1835888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         (instr & 0x00100000) == 0x00000000 &&
1835988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         ((rd < kNumberOfT32LowRegisters) &&
1836088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (rm < kNumberOfT32LowRegisters))) {
18361d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // MOV<c>.W <Rd>, <Rm> {, <shift> #<amount> } ; T3 NOLINT(whitespace/line_length)
1836288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                mov(CurrentCond(),
1836388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1836488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1836588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1836688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1836788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1836888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea4f0000)) {
1836988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1837088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1837188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1837288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
18373d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // MOV{<c>}{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; T3 NOLINT(whitespace/line_length)
1837488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                mov(CurrentCond(),
1837588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
1837688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1837788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1837888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1837988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1838088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea4f0000)) {
1838188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1838288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1838388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1838488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1838588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1838688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1838788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1838888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1838988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1839088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1839188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1839288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea400030
1839388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1839488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1839588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1839688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1839788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1839888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1839988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1840088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ORR{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1840188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              orr(CurrentCond(),
1840288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
1840388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rd),
1840488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
1840588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
1840688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0f0) != 0xea400030)) {
1840788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1840888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1840988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1841088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1841188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1841288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000) ||
1841388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x70f0) == 0x30)) {
1841488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1841588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1841688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1841788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1841888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1841988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1842088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1842188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1842288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1842388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1842488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (InITBlock() &&
1842588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00000000 &&
1842688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
1842788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1842888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd == rn) &&
1842988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rd < kNumberOfT32LowRegisters) &&
1843088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1843188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ORR<c>.W {<Rd>}, <Rn>, <Rm> ; T2
1843288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                orr(CurrentCond(),
1843388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1843488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1843588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1843688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
1843788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xea400000)) {
1843888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1843988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1844088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1844188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
18442d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // ORR{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1844388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                orr(CurrentCond(),
1844488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
1844588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1844688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1844788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1844888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1844988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1845088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xea400000)) {
1845188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1845288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1845388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1845488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1845588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1845688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1845788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1845888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1845988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1846088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1846188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1846288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
1846388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea600000
1846488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
1846588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
1846688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea6f0000
1846788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1846888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1846988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea6f0030
1847088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1847188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1847288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // MVN{<c>}{<q>} <Rd>, <Rm>, RRX ; T2
1847388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              mvn(CurrentCond(),
1847488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
1847588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rd),
1847688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
1847788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfffff0f0) != 0xea6f0030)) {
1847888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1847988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1848088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1848188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1848288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1848388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
1848488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1848588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1848688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1848788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1848888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1848988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1849088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1849188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1849288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1849388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (InITBlock() &&
1849488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00000000 &&
1849588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
1849688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1849788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
1849888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1849988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // MVN<c>.W <Rd>, <Rm> ; T2
1850088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                mvn(CurrentCond(),
1850188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1850288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1850388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
1850488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea6f0000)) {
1850588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1850688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1850788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1850888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
18509d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // MVN{<c>}{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1851088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                mvn(CurrentCond(),
1851188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
1851288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1851388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1851488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1851588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1851688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea6f0000)) {
1851788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1851888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1851988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1852088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1852188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1852288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1852388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1852488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1852588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1852688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1852788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1852888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea600030
1852988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1853088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1853188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1853288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1853388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1853488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1853588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1853688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ORN{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T1
1853788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              orn(CurrentCond(),
1853888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rd),
1853988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
1854088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
1854188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0f0) != 0xea600030)) {
1854288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1854388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1854488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1854588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1854688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1854788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000) ||
1854888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x70f0) == 0x30)) {
1854988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1855088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1855188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1855288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1855388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1855488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1855588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1855688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1855788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1855888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
18559d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // ORN{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T1 NOLINT(whitespace/line_length)
1856088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              orn(CurrentCond(),
1856188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rd),
1856288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
1856388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm),
1856488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          shift_operand.GetType(),
1856588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          shift_operand.GetAmount()));
1856688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff08000) != 0xea600000)) {
1856788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1856888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1856988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1857088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1857188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1857288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1857388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1857488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1857588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1857688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1857788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1857888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1857988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1858088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00100000: {
1858188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xea100000
1858288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00600000) {
1858388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1858488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea100000
1858588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
1858688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
1858788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea100f00
1858888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1858988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1859088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea100f30
1859188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1859288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1859388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // TST{<c>}{<q>} <Rn>, <Rm>, RRX ; T2
1859488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              tst(CurrentCond(),
1859588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
1859688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
1859788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
1859888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0fff0) != 0xea100f30)) {
1859988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1860088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1860188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1860288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1860388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1860488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
1860588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1860688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1860788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1860888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1860988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1861088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1861188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1861288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1861388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1861488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (shift_operand.GetShift().IsLSL() &&
1861588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1861688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rn < kNumberOfT32LowRegisters) &&
1861788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1861888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // TST{<c>}.W <Rn>, <Rm> ; T2
1861988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                tst(CurrentCond(),
1862088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1862188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1862288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
1862388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08f00) != 0xea100f00)) {
1862488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1862588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1862688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
18627d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // TST{<c>}{<q>} <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1862888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                tst(CurrentCond(),
1862988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
1863088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1863188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1863288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1863388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1863488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08f00) != 0xea100f00)) {
1863588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1863688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1863788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1863888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1863988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1864088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1864188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1864288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1864388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1864488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1864588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1864688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea100030
1864788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf00) == 0xf00)) {
1864888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1864988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1865088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1865188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1865288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1865388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1865488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ANDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1865588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ands(CurrentCond(),
1865688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Best,
1865788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
1865888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
1865988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Operand(Register(rm), RRX));
1866088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0f0) != 0xea100030)) {
1866188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1866288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1866388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1866488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1866588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1866688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30) ||
1866788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf00) == 0xf00)) {
1866888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1866988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1867088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1867188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1867288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1867388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1867488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1867588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1867688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1867788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1867888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (OutsideITBlock() &&
1867988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00100000 &&
1868088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
1868188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1868288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd == rn) &&
1868388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rd < kNumberOfT32LowRegisters) &&
1868488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1868588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ANDS.W {<Rd>}, <Rn>, <Rm> ; T2
18686fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                ands(Condition::None(),
1868788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
1868888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1868988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
1869088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm));
1869188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xea100000)) {
1869288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1869388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1869488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1869588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
18696d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // ANDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1869788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ands(CurrentCond(),
1869888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
1869988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1870088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
1870188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm),
1870288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetType(),
1870388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetAmount()));
1870488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xea100000)) {
1870588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1870688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1870788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1870888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1870988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1871088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1871188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1871288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1871388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1871488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1871588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1871688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
1871788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea300000
1871888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
1871988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
1872088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea300030
1872188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1872288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1872388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1872488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // BICS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1872588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          bics(CurrentCond(),
1872688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1872788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
1872888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
1872988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm), RRX));
1873088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xea300030)) {
1873188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1873288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1873388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1873488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1873588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1873688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
1873788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1873888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1873988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1874088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1874188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1874288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1874388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
1874488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
1874588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
1874688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
1874788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() &&
1874888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00100000 &&
1874988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand.GetShift().IsLSL() &&
1875088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (shift_operand.GetAmount() == 0) &&
1875188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
1875288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rm < kNumberOfT32LowRegisters))) {
1875388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // BICS.W {<Rd>}, <Rn>, <Rm> ; T2
18754fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                            bics(Condition::None(),
1875588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
1875688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
1875788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
1875888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
1875988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xea300000)) {
1876088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1876188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1876288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1876388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
18764d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // BICS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1876588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bics(CurrentCond(),
1876688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
1876788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
1876888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
1876988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Operand(Register(rm),
1877088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetType(),
1877188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetAmount()));
1877288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xea300000)) {
1877388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1877488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1877588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1877688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1877788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1877888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1877988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1878088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1878188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
1878288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea500000
1878388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
1878488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
1878588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea5f0000
1878688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1878788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1878888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea5f0030
1878988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1879088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1879188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // RRXS{<c>}{<q>} {<Rd>}, <Rm> ; T3
1879288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              rrxs(CurrentCond(), Register(rd), Register(rm));
1879388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfffff0f0) != 0xea5f0030)) {
1879488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1879588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1879688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1879788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1879888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1879988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
1880088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1880188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1880288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1880388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 4)) & Uint32(0x3)) ==
1880488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x2))) {
1880588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
1880688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
1880788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t amount = ((instr >> 6) & 0x3) |
1880888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 10) & 0x1c);
1880988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (amount == 0) amount = 32;
1881088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (OutsideITBlock() &&
1881188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((rd < kNumberOfT32LowRegisters) &&
1881288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     (rm < kNumberOfT32LowRegisters) &&
1881388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((amount >= 1) && (amount <= 32)))) {
1881488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // ASRS.W {<Rd>}, <Rm>, #<imm> ; T3
18815fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                  asrs(Condition::None(),
1881688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Wide,
1881788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1881888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rm),
1881988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       amount);
1882088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea5f0020)) {
1882188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1882288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1882388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
1882488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // ASRS{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; T3
1882588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  asrs(CurrentCond(),
1882688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1882788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1882888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rm),
1882988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       amount);
1883088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea5f0020)) {
1883188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1883288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1883388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1883488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1883588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1883688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 4)) & Uint32(0x3)) ==
1883788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x0)) &&
1883888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x000070c0) != 0x00000000)) {
1883988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
1884088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
1884188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t amount = ((instr >> 6) & 0x3) |
1884288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 10) & 0x1c);
1884388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (OutsideITBlock() &&
1884488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((rd < kNumberOfT32LowRegisters) &&
1884588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     (rm < kNumberOfT32LowRegisters) &&
1884688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((amount >= 1) && (amount <= 31)))) {
1884788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LSLS.W {<Rd>}, <Rm>, #<imm> ; T3
18848fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                  lsls(Condition::None(),
1884988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Wide,
1885088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1885188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rm),
1885288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       amount);
1885388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea5f0000)) {
1885488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1885588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1885688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
1885788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LSLS{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; T3
1885888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  lsls(CurrentCond(),
1885988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1886088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1886188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rm),
1886288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       amount);
1886388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea5f0000)) {
1886488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1886588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1886688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1886788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1886888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1886988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 4)) & Uint32(0x3)) ==
1887088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x1))) {
1887188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
1887288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
1887388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t amount = ((instr >> 6) & 0x3) |
1887488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 10) & 0x1c);
1887588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (amount == 0) amount = 32;
1887688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (OutsideITBlock() &&
1887788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((rd < kNumberOfT32LowRegisters) &&
1887888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     (rm < kNumberOfT32LowRegisters) &&
1887988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     ((amount >= 1) && (amount <= 32)))) {
1888088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LSRS.W {<Rd>}, <Rm>, #<imm> ; T3
18881fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                  lsrs(Condition::None(),
1888288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Wide,
1888388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1888488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rm),
1888588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       amount);
1888688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea5f0010)) {
1888788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1888888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1888988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
1889088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // LSRS{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; T3
1889188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  lsrs(CurrentCond(),
1889288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1889388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1889488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rm),
1889588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       amount);
1889688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8030) != 0xea5f0010)) {
1889788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1889888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1889988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1890088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1890188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1890288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 4)) & Uint32(0x3)) ==
1890388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x3)) &&
1890488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x000070c0) != 0x00000000)) {
1890588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = (instr >> 8) & 0xf;
1890688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
1890788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t amount = ((instr >> 6) & 0x3) |
1890888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 10) & 0x1c);
1890988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // RORS{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; T3
1891088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                rors(CurrentCond(),
1891188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
1891288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1891388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm),
1891488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     amount);
1891588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8030) != 0xea5f0030)) {
1891688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1891788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1891888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1891988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1892088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1892188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1892288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1892388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1892488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1892588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1892688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (OutsideITBlock() &&
1892788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00100000 &&
1892888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
1892988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1893088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // MOVS.W <Rd>, <Rm> {, <shift> #<amount> } ; T3
18931fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                movs(Condition::None(),
1893288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
1893388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1893488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm),
1893588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetType(),
1893688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetAmount()));
1893788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea5f0000)) {
1893888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1893988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1894088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1894188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
18942d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // MOVS{<c>}{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; T3 NOLINT(whitespace/line_length)
1894388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                movs(CurrentCond(),
1894488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
1894588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1894688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm),
1894788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetType(),
1894888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetAmount()));
1894988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea5f0000)) {
1895088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1895188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1895288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1895388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1895488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1895588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1895688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1895788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1895888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1895988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1896088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1896188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea500030
1896288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1896388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1896488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1896588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1896688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1896788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1896888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1896988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ORRS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1897088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              orrs(CurrentCond(),
1897188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Best,
1897288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
1897388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
1897488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Operand(Register(rm), RRX));
1897588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0f0) != 0xea500030)) {
1897688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1897788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1897888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1897988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1898088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1898188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000) ||
1898288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x70f0) == 0x30)) {
1898388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1898488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1898588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1898688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1898788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1898888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1898988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1899088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1899188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1899288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1899388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (OutsideITBlock() &&
1899488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00100000 &&
1899588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
1899688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1899788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd == rn) &&
1899888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rd < kNumberOfT32LowRegisters) &&
1899988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1900088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ORRS.W {<Rd>}, <Rn>, <Rm> ; T2
19001fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                orrs(Condition::None(),
1900288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
1900388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1900488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
1900588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm));
1900688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xea500000)) {
1900788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1900888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1900988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1901088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
19011d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // ORRS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1901288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                orrs(CurrentCond(),
1901388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
1901488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1901588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
1901688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm),
1901788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetType(),
1901888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetAmount()));
1901988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xea500000)) {
1902088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1902188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1902288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1902388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1902488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1902588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1902688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1902788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1902888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1902988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1903088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1903188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
1903288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea700000
1903388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
1903488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
1903588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea7f0000
1903688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1903788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1903888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea7f0030
1903988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1904088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1904188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // MVNS{<c>}{<q>} <Rd>, <Rm>, RRX ; T2
1904288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              mvns(CurrentCond(),
1904388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Best,
1904488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
1904588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Operand(Register(rm), RRX));
1904688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfffff0f0) != 0xea7f0030)) {
1904788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1904888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1904988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1905088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1905188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1905288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
1905388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1905488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1905588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1905688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1905788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1905888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1905988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1906088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1906188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1906288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (OutsideITBlock() &&
1906388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00100000 &&
1906488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
1906588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1906688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
1906788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1906888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // MVNS.W <Rd>, <Rm> ; T2
19069fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                mvns(Condition::None(),
1907088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
1907188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1907288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm));
1907388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea7f0000)) {
1907488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1907588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1907688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1907788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
19078d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // MVNS{<c>}{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1907988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                mvns(CurrentCond(),
1908088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
1908188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1908288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm),
1908388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetType(),
1908488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetAmount()));
1908588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xea7f0000)) {
1908688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1908788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1908888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1908988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1909088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1909188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1909288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1909388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1909488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1909588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1909688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1909788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea700030
1909888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
1909988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1910088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1910188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1910288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1910388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1910488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1910588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ORNS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T1
1910688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              orns(CurrentCond(),
1910788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
1910888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
1910988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Operand(Register(rm), RRX));
1911088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0f0) != 0xea700030)) {
1911188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1911288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1911388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1911488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1911588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1911688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000) ||
1911788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x70f0) == 0x30)) {
1911888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1911988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1912088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1912188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1912288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1912388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1912488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1912588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1912688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1912788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
19128d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // ORNS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T1 NOLINT(whitespace/line_length)
1912988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              orns(CurrentCond(),
1913088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
1913188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
1913288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Operand(Register(rm),
1913388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           shift_operand.GetType(),
1913488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           shift_operand.GetAmount()));
1913588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff08000) != 0xea700000)) {
1913688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1913788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1913888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1913988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1914088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1914188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1914288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1914388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1914488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1914588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1914688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1914788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1914888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1914988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00800000: {
1915088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xea800000
1915188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00600000) {
1915288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1915388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea800000
1915488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
1915588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
1915688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea800030
1915788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1915888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1915988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1916088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // EOR{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1916188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          eor(CurrentCond(),
1916288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
1916388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
1916488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
1916588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), RRX));
1916688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xea800030)) {
1916788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1916888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1916988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1917088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1917188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1917288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
1917388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1917488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1917588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1917688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1917788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1917888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1917988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
1918088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
1918188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
1918288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
1918388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
1918488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00000000 &&
1918588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand.GetShift().IsLSL() &&
1918688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (shift_operand.GetAmount() == 0) &&
1918788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
1918888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rm < kNumberOfT32LowRegisters))) {
1918988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // EOR<c>.W {<Rd>}, <Rn>, <Rm> ; T2
1919088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            eor(CurrentCond(),
1919188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
1919288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1919388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1919488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
1919588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xea800000)) {
1919688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1919788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1919888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1919988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
19200d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // EOR{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1920188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            eor(CurrentCond(),
1920288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
1920388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1920488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1920588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm),
1920688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetType(),
1920788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetAmount()));
1920888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xea800000)) {
1920988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1921088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1921188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1921288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1921388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1921488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1921588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1921688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1921788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
1921888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xeac00000
1921988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000030) {
1922088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
1922188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xeac00000
1922288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1922388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1922488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1922588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t amount =
1922688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
19227d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // PKHBT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, LSL #<imm> } ; T1 NOLINT(whitespace/line_length)
1922888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          pkhbt(CurrentCond(),
1922988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1923088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1923188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm), LSL, amount));
1923288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff08030) != 0xeac00000)) {
1923388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1923488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1923588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1923688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1923788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000020: {
1923888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xeac00020
1923988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1924088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1924188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1924288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t amount =
1924388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 6) & 0x3) | ((instr >> 10) & 0x1c);
1924488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (amount == 0) amount = 32;
19245d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // PKHTB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ASR #<imm> } ; T1 NOLINT(whitespace/line_length)
1924688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          pkhtb(CurrentCond(),
1924788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1924888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1924988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm), ASR, amount));
1925088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff08030) != 0xeac00020)) {
1925188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1925288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1925388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1925488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
192554339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                        default:
1925688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
1925788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1925888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1925988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1926088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
192614339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
1926288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
1926388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1926488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1926588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1926688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1926788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00900000: {
1926888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xea900000
1926988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00600000) {
1927088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1927188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xea900000
1927288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
1927388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
1927488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xea900f00
1927588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1927688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1927788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea900f30
1927888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1927988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1928088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // TEQ{<c>}{<q>} <Rn>, <Rm>, RRX ; T1
1928188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              teq(CurrentCond(),
1928288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
1928388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
1928488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0fff0) != 0xea900f30)) {
1928588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1928688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1928788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1928888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1928988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1929088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
1929188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1929288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1929388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1929488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1929588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1929688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1929788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1929888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1929988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
19300d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // TEQ{<c>}{<q>} <Rn>, <Rm> {, <shift> #<amount> } ; T1 NOLINT(whitespace/line_length)
1930188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              teq(CurrentCond(),
1930288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
1930388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm),
1930488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          shift_operand.GetType(),
1930588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          shift_operand.GetAmount()));
1930688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff08f00) != 0xea900f00)) {
1930788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1930888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1930988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1931088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1931188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1931288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1931388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1931488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1931588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1931688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1931788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xea900030
1931888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf00) == 0xf00)) {
1931988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1932088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1932188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1932288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1932388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1932488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1932588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // EORS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1932688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              eors(CurrentCond(),
1932788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Best,
1932888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
1932988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
1933088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Operand(Register(rm), RRX));
1933188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0f0) != 0xea900030)) {
1933288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1933388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1933488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1933588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1933688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1933788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30) ||
1933888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xf00) == 0xf00)) {
1933988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1934088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1934188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1934288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1934388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1934488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1934588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1934688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1934788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1934888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1934988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (OutsideITBlock() &&
1935088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00100000 &&
1935188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
1935288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1935388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd == rn) &&
1935488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rd < kNumberOfT32LowRegisters) &&
1935588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1935688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // EORS.W {<Rd>}, <Rn>, <Rm> ; T2
19357fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                eors(Condition::None(),
1935888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
1935988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1936088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
1936188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm));
1936288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xea900000)) {
1936388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1936488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1936588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1936688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
19367d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // EORS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1936888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                eors(CurrentCond(),
1936988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
1937088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
1937188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
1937288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm),
1937388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetType(),
1937488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             shift_operand.GetAmount()));
1937588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xea900000)) {
1937688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1937788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1937888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1937988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1938088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1938188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1938288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1938388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1938488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1938588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1938688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
193874339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
1938888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
1938988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1939088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1939188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1939288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1939388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01000000: {
1939488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xeb000000
1939588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00600000) {
1939688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1939788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xeb000000
1939888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
1939988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000d0000: {
1940088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xeb0d0000
1940188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1940288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1940388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeb0d0030
1940488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1940588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1940688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ADD{<c>}{<q>} {<Rd>}, SP, <Rm>, RRX ; T3
1940788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              add(CurrentCond(),
1940888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
1940988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rd),
1941088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  sp,
1941188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
1941288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfffff0f0) != 0xeb0d0030)) {
1941388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1941488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1941588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1941688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1941788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1941888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
1941988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1942088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1942188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1942288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1942388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1942488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1942588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1942688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1942788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1942888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00100000) == 0x00000000 &&
1942988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
1943088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1943188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (((rd == rm)) || ((rd == sp.GetCode())))) {
1943288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADD{<c>}.W {<Rd>}, SP, <Rm> ; T3
1943388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                add(CurrentCond(),
1943488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1943588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1943688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sp,
1943788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
1943888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xeb0d0000)) {
1943988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1944088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1944188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1944288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
19443d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // ADD{<c>}{<q>} {<Rd>}, SP, <Rm> {, <shift> #<amount> } ; T3 NOLINT(whitespace/line_length)
1944488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                add(CurrentCond(),
1944588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
1944688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1944788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sp,
1944888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1944988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1945088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1945188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xeb0d0000)) {
1945288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1945388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1945488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1945588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1945688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1945788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1945888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1945988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1946088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1946188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1946288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1946388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeb000030
1946488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xd0000)) {
1946588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1946688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1946788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1946888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1946988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1947088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1947188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // ADD{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T3
1947288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              add(CurrentCond(),
1947388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
1947488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rd),
1947588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
1947688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
1947788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0f0) != 0xeb000030)) {
1947888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1947988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1948088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1948188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1948288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1948388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xd0000) ||
1948488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x70f0) == 0x30)) {
1948588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1948688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1948788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1948888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
1948988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1949088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1949188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1949288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1949388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1949488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1949588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (InITBlock() &&
1949688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00000000 &&
1949788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
1949888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1949988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
1950088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rn < kNumberOfT32LowRegisters) &&
1950188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1950288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADD<c>.W {<Rd>}, <Rn>, <Rm> ; T3
1950388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                add(CurrentCond(),
1950488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1950588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1950688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1950788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
1950888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xeb000000)) {
1950988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1951088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1951188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else if ((instr & 0x00100000) == 0x00000000 &&
1951288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetShift().IsLSL() &&
1951388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         (shift_operand.GetAmount() == 0) &&
1951488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         ((rd == rn))) {
1951588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // ADD<c>.W {<Rd>}, <Rn>, <Rm> ; T3
1951688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                add(CurrentCond(),
1951788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1951888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1951988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1952088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
1952188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xeb000000)) {
1952288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1952388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1952488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
1952588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
19526d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // ADD{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T3 NOLINT(whitespace/line_length)
1952788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                add(CurrentCond(),
1952888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
1952988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
1953088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1953188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1953288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1953388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1953488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xeb000000)) {
1953588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1953688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1953788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1953888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1953988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1954088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1954188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1954288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1954388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1954488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1954588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1954688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
1954788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xeb400000
1954888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
1954988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
1955088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xeb400030
1955188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1955288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1955388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1955488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ADC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1955588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          adc(CurrentCond(),
1955688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
1955788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
1955888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
1955988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), RRX));
1956088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xeb400030)) {
1956188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1956288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1956388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1956488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1956588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1956688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
1956788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1956888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1956988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1957088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1957188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1957288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1957388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
1957488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
1957588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
1957688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
1957788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
1957888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00000000 &&
1957988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand.GetShift().IsLSL() &&
1958088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (shift_operand.GetAmount() == 0) &&
1958188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
1958288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rm < kNumberOfT32LowRegisters))) {
1958388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADC<c>.W {<Rd>}, <Rn>, <Rm> ; T2
1958488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            adc(CurrentCond(),
1958588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
1958688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1958788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1958888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
1958988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xeb400000)) {
1959088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1959188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1959288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1959388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
19594d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // ADC{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1959588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            adc(CurrentCond(),
1959688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
1959788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1959888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1959988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm),
1960088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetType(),
1960188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetAmount()));
1960288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xeb400000)) {
1960388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1960488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1960588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1960688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1960788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1960888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1960988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1961088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1961188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
1961288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xeb600000
1961388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
1961488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
1961588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xeb600030
1961688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1961788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1961888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1961988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SBC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1962088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          sbc(CurrentCond(),
1962188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
1962288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
1962388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
1962488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), RRX));
1962588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xeb600030)) {
1962688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1962788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1962888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1962988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1963088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1963188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
1963288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1963388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1963488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1963588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1963688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1963788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1963888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
1963988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
1964088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
1964188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
1964288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
1964388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00000000 &&
1964488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand.GetShift().IsLSL() &&
1964588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (shift_operand.GetAmount() == 0) &&
1964688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
1964788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rm < kNumberOfT32LowRegisters))) {
1964888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SBC<c>.W {<Rd>}, <Rn>, <Rm> ; T2
1964988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sbc(CurrentCond(),
1965088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
1965188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1965288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1965388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
1965488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xeb600000)) {
1965588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1965688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1965788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1965888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
19659d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // SBC{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1966088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sbc(CurrentCond(),
1966188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
1966288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
1966388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
1966488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm),
1966588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetType(),
1966688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetAmount()));
1966788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xeb600000)) {
1966888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1966988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1967088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1967188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1967288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1967388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1967488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1967588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
196764339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
1967788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
1967888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1967988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
1968088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
1968188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
1968288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01100000: {
1968388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xeb100000
1968488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00600000) {
1968588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
1968688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xeb100000
1968788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
1968888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
1968988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xeb100f00
1969088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
1969188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
1969288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeb100f30
1969388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1969488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1969588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // CMN{<c>}{<q>} <Rn>, <Rm>, RRX ; T2
1969688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              cmn(CurrentCond(),
1969788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
1969888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
1969988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
1970088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0fff0) != 0xeb100f30)) {
1970188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
1970288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1970388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1970488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1970588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1970688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
1970788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
1970888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
1970988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1971088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
1971188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
1971288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
1971388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
1971488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
1971588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
1971688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (shift_operand.GetShift().IsLSL() &&
1971788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
1971888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rn < kNumberOfT32LowRegisters) &&
1971988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
1972088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // CMN{<c>}.W <Rn>, <Rm> ; T2
1972188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                cmn(CurrentCond(),
1972288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
1972388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1972488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
1972588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08f00) != 0xeb100f00)) {
1972688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1972788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1972888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
19729d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // CMN{<c>}{<q>} <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1973088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                cmn(CurrentCond(),
1973188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
1973288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
1973388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
1973488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
1973588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
1973688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08f00) != 0xeb100f00)) {
1973788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
1973888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1973988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1974088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1974188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1974288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1974388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1974488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1974588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1974688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
1974788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000d0000: {
1974888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeb1d0000
1974988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000070f0) {
1975088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000030: {
1975188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeb1d0030
1975288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf00) == 0xf00)) {
1975388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1975488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1975588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1975688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
1975788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
1975888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // ADDS{<c>}{<q>} {<Rd>}, SP, <Rm>, RRX ; T3
1975988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  adds(CurrentCond(),
1976088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1976188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1976288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       sp,
1976388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Operand(Register(rm), RRX));
1976488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfffff0f0) != 0xeb1d0030)) {
1976588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1976688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1976788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1976888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1976988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1977088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x70f0) == 0x30) ||
1977188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf00) == 0xf00)) {
1977288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1977388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1977488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1977588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
1977688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
1977788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ImmediateShiftOperand
1977888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift_operand((instr >> 4) & 0x3,
1977988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 6) & 0x3) |
1978088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 10) & 0x1c));
19781d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // ADDS{<c>}{<q>} {<Rd>}, SP, <Rm> {, <shift> #<amount> } ; T3 NOLINT(whitespace/line_length)
1978288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  adds(CurrentCond(),
1978388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1978488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1978588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       sp,
1978688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Operand(Register(rm),
1978788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               shift_operand.GetType(),
1978888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               shift_operand.GetAmount()));
1978988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8000) != 0xeb1d0000)) {
1979088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1979188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1979288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1979388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1979488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1979588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1979688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1979788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
1979888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000070f0) {
1979988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000030: {
1980088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeb100030
1980188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xd0000) ||
1980288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf00) == 0xf00)) {
1980388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1980488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1980588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1980688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
1980788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1980888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
1980988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // ADDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T3
1981088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  adds(CurrentCond(),
1981188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
1981288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
1981388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rn),
1981488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Operand(Register(rm), RRX));
1981588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff0f0f0) != 0xeb100030)) {
1981688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
1981788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1981888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1981988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1982088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
1982188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xd0000) ||
1982288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0x70f0) == 0x30) ||
1982388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf00) == 0xf00)) {
1982488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
1982588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
1982688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1982788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
1982888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
1982988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
1983088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ImmediateShiftOperand
1983188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift_operand((instr >> 4) & 0x3,
1983288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 6) & 0x3) |
1983388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 10) & 0x1c));
1983488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (OutsideITBlock() &&
1983588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (instr & 0x00100000) == 0x00100000 &&
1983688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift_operand.GetShift().IsLSL() &&
1983788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (shift_operand.GetAmount() == 0) &&
1983888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((rd < kNumberOfT32LowRegisters) &&
1983988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       (rn < kNumberOfT32LowRegisters) &&
1984088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       (rm < kNumberOfT32LowRegisters))) {
1984188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // ADDS.W {<Rd>}, <Rn>, <Rm> ; T3
19842fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                    adds(Condition::None(),
1984388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Wide,
1984488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
1984588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rn),
1984688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rm));
1984788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xfff08000) != 0xeb100000)) {
1984888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnpredictableT32(instr);
1984988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1985088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
1985188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_ASSERT((instr & 0x00100000) ==
1985288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                0x00100000);
19853d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // ADDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T3 NOLINT(whitespace/line_length)
1985488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    adds(CurrentCond(),
1985588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Best,
1985688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
1985788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rn),
1985888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Operand(Register(rm),
1985988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 shift_operand.GetType(),
1986088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 shift_operand.GetAmount()));
1986188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xfff08000) != 0xeb100000)) {
1986288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnpredictableT32(instr);
1986388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
1986488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
1986588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
1986688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
1986788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
1986888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
1986988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1987088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1987188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1987288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1987388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1987488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1987588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1987688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
1987788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xeb500000
1987888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
1987988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
1988088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xeb500030
1988188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1988288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1988388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1988488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ADCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1988588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          adcs(CurrentCond(),
1988688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1988788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
1988888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
1988988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm), RRX));
1989088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xeb500030)) {
1989188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1989288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1989388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1989488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1989588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1989688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
1989788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1989888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1989988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1990088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1990188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1990288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1990388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
1990488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
1990588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
1990688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
1990788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() &&
1990888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00100000 &&
1990988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand.GetShift().IsLSL() &&
1991088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (shift_operand.GetAmount() == 0) &&
1991188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
1991288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rm < kNumberOfT32LowRegisters))) {
1991388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADCS.W {<Rd>}, <Rn>, <Rm> ; T2
19914fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                            adcs(Condition::None(),
1991588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
1991688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
1991788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
1991888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
1991988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xeb500000)) {
1992088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1992188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1992288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1992388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
19924d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // ADCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1992588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            adcs(CurrentCond(),
1992688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
1992788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
1992888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
1992988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Operand(Register(rm),
1993088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetType(),
1993188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetAmount()));
1993288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xeb500000)) {
1993388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1993488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1993588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1993688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1993788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1993888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
1993988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
1994088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
1994188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
1994288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xeb700000
1994388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
1994488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
1994588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xeb700030
1994688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1994788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1994888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1994988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SBCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
1995088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          sbcs(CurrentCond(),
1995188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
1995288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
1995388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
1995488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm), RRX));
1995588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xeb700030)) {
1995688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
1995788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1995888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
1995988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
1996088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
1996188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
1996288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
1996388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
1996488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
1996588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
1996688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
1996788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
1996888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
1996988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
1997088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
1997188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
1997288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() &&
1997388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (instr & 0x00100000) == 0x00100000 &&
1997488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand.GetShift().IsLSL() &&
1997588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (shift_operand.GetAmount() == 0) &&
1997688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rn) && (rd < kNumberOfT32LowRegisters) &&
1997788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rm < kNumberOfT32LowRegisters))) {
1997888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SBCS.W {<Rd>}, <Rn>, <Rm> ; T2
19979fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                            sbcs(Condition::None(),
1998088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
1998188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
1998288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
1998388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
1998488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xeb700000)) {
1998588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1998688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
1998788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
1998888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
19989d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // SBCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
1999088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sbcs(CurrentCond(),
1999188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
1999288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
1999388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
1999488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Operand(Register(rm),
1999588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetType(),
1999688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         shift_operand.GetAmount()));
1999788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xfff08000) != 0xeb700000)) {
1999888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
1999988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2000088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2000188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2000288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2000388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2000488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2000588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
200064339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2000788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2000888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2000988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2001088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2001188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2001288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01800000: {
2001388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xeb800000
2001488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00600000) {
2001588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2001688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xeba00000
2001788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
2001888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000d0000: {
2001988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xebad0000
2002088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
2002188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
2002288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xebad0030
2002388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2002488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2002588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // SUB{<c>}{<q>} {<Rd>}, SP, <Rm>, RRX ; T1
2002688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              sub(CurrentCond(),
2002788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
2002888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rd),
2002988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  sp,
2003088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
2003188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfffff0f0) != 0xebad0030)) {
2003288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2003388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2003488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2003588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2003688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2003788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
2003888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2003988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2004088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2004188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2004288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2004388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
2004488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
2004588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
2004688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
2004788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00100000) == 0x00000000 &&
2004888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
2004988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0)) {
2005088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SUB{<c>} {<Rd>}, SP, <Rm> ; T1
2005188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sub(CurrentCond(),
2005288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
2005388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
2005488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sp,
2005588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
2005688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xebad0000)) {
2005788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2005888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2005988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2006088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
20061d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // SUB{<c>}{<q>} {<Rd>}, SP, <Rm> {, <shift> #<amount> } ; T1 NOLINT(whitespace/line_length)
2006288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sub(CurrentCond(),
2006388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
2006488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
2006588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sp,
2006688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
2006788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
2006888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
2006988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xffff8000) != 0xebad0000)) {
2007088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2007188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2007288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2007388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2007488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2007588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2007688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2007788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2007888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2007988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
2008088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
2008188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeba00030
2008288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xd0000)) {
2008388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2008488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2008588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2008688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2008788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2008888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2008988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // SUB{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
2009088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              sub(CurrentCond(),
2009188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
2009288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rd),
2009388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
2009488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
2009588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0f0) != 0xeba00030)) {
2009688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2009788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2009888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2009988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2010088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2010188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xd0000) ||
2010288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0x70f0) == 0x30)) {
2010388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2010488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2010588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2010688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2010788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2010888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2010988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
2011088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
2011188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
2011288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
2011388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (InITBlock() &&
2011488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0x00100000) == 0x00000000 &&
2011588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand.GetShift().IsLSL() &&
2011688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0) &&
2011788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
2011888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rn < kNumberOfT32LowRegisters) &&
2011988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
2012088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SUB<c>.W {<Rd>}, <Rn>, <Rm> ; T2
2012188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sub(CurrentCond(),
2012288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
2012388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
2012488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
2012588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
2012688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xeba00000)) {
2012788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2012888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2012988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2013088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
20131d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // SUB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
2013288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sub(CurrentCond(),
2013388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
2013488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
2013588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
2013688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
2013788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
2013888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
2013988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08000) != 0xeba00000)) {
2014088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2014188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2014288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2014388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2014488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2014588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2014688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2014788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2014888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2014988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2015088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2015188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
2015288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xebc00000
2015388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
2015488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
2015588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xebc00030
2015688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2015788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2015888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2015988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // RSB{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T1
2016088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rsb(CurrentCond(),
2016188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
2016288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2016388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2016488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), RRX));
2016588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xebc00030)) {
2016688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
2016788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2016888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2016988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2017088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2017188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
2017288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2017388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2017488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2017588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2017688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2017788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2017888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
2017988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
2018088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
2018188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
20182d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // RSB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T1 NOLINT(whitespace/line_length)
2018388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rsb(CurrentCond(),
2018488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
2018588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2018688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2018788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm),
2018888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift_operand.GetType(),
2018988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift_operand.GetAmount()));
2019088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff08000) != 0xebc00000)) {
2019188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
2019288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2019388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2019488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2019588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2019688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2019788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
201984339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2019988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2020088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2020188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2020288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2020388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2020488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01900000: {
2020588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xeb900000
2020688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00600000) {
2020788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2020888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xebb00000
2020988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
2021088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
2021188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xebb00f00
2021288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000070f0) {
2021388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000030: {
2021488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xebb00f30
2021588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2021688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2021788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // CMP{<c>}{<q>} <Rn>, <Rm>, RRX ; T3
2021888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              cmp(CurrentCond(),
2021988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
2022088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rn),
2022188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Operand(Register(rm), RRX));
2022288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0fff0) != 0xebb00f30)) {
2022388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2022488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2022588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2022688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2022788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2022888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x70f0) == 0x30)) {
2022988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2023088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2023188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2023288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2023388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2023488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ImmediateShiftOperand
2023588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  shift_operand((instr >> 4) & 0x3,
2023688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 6) & 0x3) |
2023788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 10) & 0x1c));
2023888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (shift_operand.GetShift().IsLSL() &&
2023988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (shift_operand.GetAmount() == 0)) {
2024088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // CMP{<c>}.W <Rn>, <Rm> ; T3
2024188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                cmp(CurrentCond(),
2024288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Wide,
2024388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
2024488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm));
2024588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08f00) != 0xebb00f00)) {
2024688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2024788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2024888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
20249d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // CMP{<c>}{<q>} <Rn>, <Rm>, <shift> #<amount> ; T3 NOLINT(whitespace/line_length)
2025088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                cmp(CurrentCond(),
2025188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Best,
2025288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
2025388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm),
2025488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetType(),
2025588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            shift_operand.GetAmount()));
2025688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff08f00) != 0xebb00f00)) {
2025788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2025888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2025988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2026088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2026188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2026288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2026388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2026488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2026588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2026688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
2026788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000d0000: {
2026888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xebbd0000
2026988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000070f0) {
2027088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000030: {
2027188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xebbd0030
2027288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf00) == 0xf00)) {
2027388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2027488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2027588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2027688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
2027788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
2027888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // SUBS{<c>}{<q>} {<Rd>}, SP, <Rm>, RRX ; T1
2027988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  subs(CurrentCond(),
2028088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
2028188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
2028288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       sp,
2028388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Operand(Register(rm), RRX));
2028488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfffff0f0) != 0xebbd0030)) {
2028588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2028688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2028788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2028888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2028988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
2029088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x70f0) == 0x30) ||
2029188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf00) == 0xf00)) {
2029288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2029388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2029488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2029588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
2029688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
2029788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ImmediateShiftOperand
2029888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift_operand((instr >> 4) & 0x3,
2029988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 6) & 0x3) |
2030088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 10) & 0x1c));
20301d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // SUBS{<c>}{<q>} {<Rd>}, SP, <Rm> {, <shift> #<amount> } ; T1 NOLINT(whitespace/line_length)
2030288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  subs(CurrentCond(),
2030388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
2030488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
2030588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       sp,
2030688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Operand(Register(rm),
2030788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               shift_operand.GetType(),
2030888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               shift_operand.GetAmount()));
2030988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffff8000) != 0xebbd0000)) {
2031088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2031188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2031288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2031388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2031488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2031588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2031688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2031788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2031888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000070f0) {
2031988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000030: {
2032088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xebb00030
2032188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xd0000) ||
2032288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf00) == 0xf00)) {
2032388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2032488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2032588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2032688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
2032788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
2032888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
2032988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // SUBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T2
2033088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  subs(CurrentCond(),
2033188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Best,
2033288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rd),
2033388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rn),
2033488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Operand(Register(rm), RRX));
2033588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff0f0f0) != 0xebb00030)) {
2033688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2033788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2033888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2033988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2034088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
2034188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xd0000) ||
2034288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0x70f0) == 0x30) ||
2034388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr & 0xf00) == 0xf00)) {
2034488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2034588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2034688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2034788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = (instr >> 8) & 0xf;
2034888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
2034988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = instr & 0xf;
2035088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ImmediateShiftOperand
2035188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift_operand((instr >> 4) & 0x3,
2035288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 6) & 0x3) |
2035388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 10) & 0x1c));
2035488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (OutsideITBlock() &&
2035588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (instr & 0x00100000) == 0x00100000 &&
2035688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift_operand.GetShift().IsLSL() &&
2035788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (shift_operand.GetAmount() == 0) &&
2035888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((rd < kNumberOfT32LowRegisters) &&
2035988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       (rn < kNumberOfT32LowRegisters) &&
2036088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       (rm < kNumberOfT32LowRegisters))) {
2036188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // SUBS.W {<Rd>}, <Rn>, <Rm> ; T2
20362fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                    subs(Condition::None(),
2036388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Wide,
2036488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
2036588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rn),
2036688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rm));
2036788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xfff08000) != 0xebb00000)) {
2036888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnpredictableT32(instr);
2036988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2037088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2037188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_ASSERT((instr & 0x00100000) ==
2037288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                0x00100000);
20373d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // SUBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T2 NOLINT(whitespace/line_length)
2037488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    subs(CurrentCond(),
2037588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Best,
2037688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rd),
2037788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rn),
2037888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Operand(Register(rm),
2037988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 shift_operand.GetType(),
2038088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 shift_operand.GetAmount()));
2038188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xfff08000) != 0xebb00000)) {
2038288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnpredictableT32(instr);
2038388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2038488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2038588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2038688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2038788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2038888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2038988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2039088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2039188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2039288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2039388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2039488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2039588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2039688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
2039788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xebd00000
2039888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000070f0) {
2039988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000030: {
2040088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xebd00030
2040188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2040288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2040388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2040488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // RSBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; T1
2040588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rsbs(CurrentCond(),
2040688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
2040788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
2040888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
2040988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm), RRX));
2041088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0f0f0) != 0xebd00030)) {
2041188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
2041288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2041388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2041488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2041588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2041688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x70f0) == 0x30)) {
2041788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2041888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2041988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2042088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2042188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2042288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2042388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ImmediateShiftOperand
2042488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift_operand((instr >> 4) & 0x3,
2042588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 6) & 0x3) |
2042688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 10) & 0x1c));
20427d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                          // RSBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; T1 NOLINT(whitespace/line_length)
2042888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rsbs(CurrentCond(),
2042988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
2043088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
2043188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
2043288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm),
2043388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       shift_operand.GetType(),
2043488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       shift_operand.GetAmount()));
2043588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff08000) != 0xebd00000)) {
2043688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
2043788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2043888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2043988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2044088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2044188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2044288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
204434339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2044488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2044588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2044688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2044788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2044888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2044988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x10000000: {
2045088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfa000000
2045188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x0000f080) {
2045288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f000: {
2045388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa00f000
2045488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((instr & 0x00000070) == 0x00000000) {
2045588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x3)) ==
2045688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x2))) {
2045788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2045888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 16) & 0xf;
2045988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rs = instr & 0xf;
2046088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
2046188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2046288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rs < kNumberOfT32LowRegisters))) {
2046388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ASR<c>.W {<Rd>}, <Rm>, <Rs> ; T2
2046488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            asr(CurrentCond(),
2046588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
2046688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2046788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2046888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rs));
2046988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2047088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ASR{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; T2
2047188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            asr(CurrentCond(),
2047288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
2047388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2047488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2047588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rs));
2047688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2047788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
2047888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2047988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x3)) ==
2048088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x0))) {
2048188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2048288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 16) & 0xf;
2048388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rs = instr & 0xf;
2048488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
2048588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2048688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rs < kNumberOfT32LowRegisters))) {
2048788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LSL<c>.W {<Rd>}, <Rm>, <Rs> ; T2
2048888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            lsl(CurrentCond(),
2048988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
2049088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2049188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2049288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rs));
2049388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2049488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LSL{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; T2
2049588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            lsl(CurrentCond(),
2049688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
2049788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2049888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2049988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rs));
2050088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2050188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
2050288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2050388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x3)) ==
2050488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x1))) {
2050588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2050688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 16) & 0xf;
2050788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rs = instr & 0xf;
2050888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
2050988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2051088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rs < kNumberOfT32LowRegisters))) {
2051188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LSR<c>.W {<Rd>}, <Rm>, <Rs> ; T2
2051288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            lsr(CurrentCond(),
2051388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
2051488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2051588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2051688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rs));
2051788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2051888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LSR{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; T2
2051988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            lsr(CurrentCond(),
2052088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
2052188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2052288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2052388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rs));
2052488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2052588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
2052688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2052788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x3)) ==
2052888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x3))) {
2052988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2053088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 16) & 0xf;
2053188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rs = instr & 0xf;
2053288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
2053388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2053488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rs < kNumberOfT32LowRegisters))) {
2053588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ROR<c>.W {<Rd>}, <Rm>, <Rs> ; T2
2053688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ror(CurrentCond(),
2053788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
2053888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2053988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2054088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rs));
2054188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2054288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ROR{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; T2
2054388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ror(CurrentCond(),
2054488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
2054588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2054688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2054788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rs));
2054888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2054988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
2055088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2055188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 8) & 0xf;
2055288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 16) & 0xf;
2055388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Shift shift((instr >> 21) & 0x3);
2055488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rs = instr & 0xf;
2055588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (InITBlock() && (instr & 0x00100000) == 0x00000000 &&
2055688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((rd < kNumberOfT32LowRegisters) &&
2055788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             (rm < kNumberOfT32LowRegisters) &&
2055888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             (rs < kNumberOfT32LowRegisters))) {
2055988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // MOV<c>.W <Rd>, <Rm>, <shift> <Rs> ; T2
2056088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          mov(CurrentCond(),
2056188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Wide,
2056288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2056388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm),
2056488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift.GetType(),
2056588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rs)));
2056688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
2056788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          VIXL_ASSERT((instr & 0x00100000) == 0x00000000);
2056888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // MOV{<c>}{<q>} <Rd>, <Rm>, <shift> <Rs> ; T2
2056988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          mov(CurrentCond(),
2057088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
2057188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2057288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm),
2057388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      shift.GetType(),
2057488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rs)));
2057588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2057688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
2057788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2057888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2057988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2058088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2058188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f080: {
2058288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa00f080
2058388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00600000) {
2058488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2058588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfa00f080
2058688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
2058788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
2058888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfa0ff080
2058988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2059088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2059188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
2059288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((amount == 0) &&
2059388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
2059488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
2059588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SXTH{<c>}.W {<Rd>}, <Rm> ; T2
2059688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sxth(CurrentCond(),
2059788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
2059888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2059988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm));
2060088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfffff0c0) != 0xfa0ff080)) {
2060188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2060288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2060388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
20604d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // SXTH{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; T2 NOLINT(whitespace/line_length)
2060588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sxth(CurrentCond(),
2060688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
2060788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2060888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm), ROR, amount));
2060988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfffff0c0) != 0xfa0ff080)) {
2061088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2061188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2061288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2061388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2061488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2061588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2061688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
2061788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2061888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2061988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2062088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2062188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2062288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2062388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
20624d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // SXTAH{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; T1 NOLINT(whitespace/line_length)
2062588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              sxtah(CurrentCond(),
2062688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
2062788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
2062888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm), ROR, amount));
2062988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0c0) != 0xfa00f080)) {
2063088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2063188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2063288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2063388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2063488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2063588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2063688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2063788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00200000: {
2063888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfa20f080
2063988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
2064088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
2064188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfa2ff080
2064288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2064388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2064488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
20645d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // SXTB16{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; T1 NOLINT(whitespace/line_length)
2064688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              sxtb16(CurrentCond(),
2064788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2064888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm), ROR, amount));
2064988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfffff0c0) != 0xfa2ff080)) {
2065088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2065188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2065288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2065388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2065488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2065588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
2065688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2065788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2065888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2065988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2066088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2066188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2066288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
20663d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // SXTAB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; T1 NOLINT(whitespace/line_length)
2066488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              sxtab16(CurrentCond(),
2066588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
2066688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rn),
2066788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Operand(Register(rm), ROR, amount));
2066888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0c0) != 0xfa20f080)) {
2066988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2067088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2067188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2067288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2067388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2067488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2067588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2067688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400000: {
2067788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfa40f080
2067888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
2067988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
2068088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfa4ff080
2068188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2068288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2068388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
2068488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((amount == 0) &&
2068588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
2068688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
2068788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // SXTB{<c>}.W {<Rd>}, <Rm> ; T2
2068888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sxtb(CurrentCond(),
2068988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
2069088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2069188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm));
2069288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfffff0c0) != 0xfa4ff080)) {
2069388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2069488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2069588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
20696d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // SXTB{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; T2 NOLINT(whitespace/line_length)
2069788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sxtb(CurrentCond(),
2069888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
2069988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2070088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm), ROR, amount));
2070188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfffff0c0) != 0xfa4ff080)) {
2070288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2070388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2070488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2070588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2070688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2070788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2070888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
2070988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2071088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2071188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2071288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2071388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2071488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2071588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
20716d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // SXTAB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; T1 NOLINT(whitespace/line_length)
2071788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              sxtab(CurrentCond(),
2071888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
2071988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
2072088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm), ROR, amount));
2072188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0c0) != 0xfa40f080)) {
2072288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2072388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2072488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2072588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2072688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2072788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2072888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
207294339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                        default:
2073088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
2073188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2073288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2073388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2073488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
207354339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2073688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2073788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2073888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2073988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2074088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2074188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x10100000: {
2074288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfa100000
2074388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x0000f080) {
2074488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f000: {
2074588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa10f000
2074688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((instr & 0x00000070) == 0x00000000) {
2074788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x3)) ==
2074888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x2))) {
2074988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2075088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 16) & 0xf;
2075188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rs = instr & 0xf;
2075288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() &&
2075388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2075488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rs < kNumberOfT32LowRegisters))) {
2075588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ASRS.W {<Rd>}, <Rm>, <Rs> ; T2
20756fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                            asrs(Condition::None(),
2075788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
2075888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2075988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2076088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rs));
2076188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2076288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ASRS{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; T2
2076388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            asrs(CurrentCond(),
2076488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
2076588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2076688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2076788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rs));
2076888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2076988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
2077088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2077188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x3)) ==
2077288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x0))) {
2077388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2077488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 16) & 0xf;
2077588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rs = instr & 0xf;
2077688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() &&
2077788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2077888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rs < kNumberOfT32LowRegisters))) {
2077988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LSLS.W {<Rd>}, <Rm>, <Rs> ; T2
20780fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                            lsls(Condition::None(),
2078188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
2078288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2078388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2078488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rs));
2078588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2078688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LSLS{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; T2
2078788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            lsls(CurrentCond(),
2078888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
2078988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2079088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2079188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rs));
2079288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2079388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
2079488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2079588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x3)) ==
2079688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x1))) {
2079788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2079888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 16) & 0xf;
2079988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rs = instr & 0xf;
2080088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() &&
2080188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2080288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rs < kNumberOfT32LowRegisters))) {
2080388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LSRS.W {<Rd>}, <Rm>, <Rs> ; T2
20804fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                            lsrs(Condition::None(),
2080588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
2080688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2080788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2080888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rs));
2080988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2081088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LSRS{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; T2
2081188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            lsrs(CurrentCond(),
2081288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
2081388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2081488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2081588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rs));
2081688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2081788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
2081888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2081988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x3)) ==
2082088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x3))) {
2082188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2082288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = (instr >> 16) & 0xf;
2082388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rs = instr & 0xf;
2082488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (OutsideITBlock() &&
2082588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2082688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rs < kNumberOfT32LowRegisters))) {
2082788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // RORS.W {<Rd>}, <Rm>, <Rs> ; T2
20828fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                            rors(Condition::None(),
2082988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Wide,
2083088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2083188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2083288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rs));
2083388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2083488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // RORS{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; T2
2083588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            rors(CurrentCond(),
2083688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
2083788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2083888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2083988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rs));
2084088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2084188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
2084288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2084388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 8) & 0xf;
2084488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 16) & 0xf;
2084588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Shift shift((instr >> 21) & 0x3);
2084688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rs = instr & 0xf;
2084788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (OutsideITBlock() &&
2084888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (instr & 0x00100000) == 0x00100000 &&
2084988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((rd < kNumberOfT32LowRegisters) &&
2085088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             (rm < kNumberOfT32LowRegisters) &&
2085188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             (rs < kNumberOfT32LowRegisters))) {
2085288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // MOVS.W <Rd>, <Rm>, <shift> <Rs> ; T2
20853fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                          movs(Condition::None(),
2085488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Wide,
2085588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
2085688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm),
2085788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       shift.GetType(),
2085888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rs)));
2085988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
2086088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          VIXL_ASSERT((instr & 0x00100000) == 0x00100000);
2086188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // MOVS{<c>}{<q>} <Rd>, <Rm>, <shift> <Rs> ; T2
2086288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          movs(CurrentCond(),
2086388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Best,
2086488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
2086588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm),
2086688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       shift.GetType(),
2086788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rs)));
2086888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2086988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
2087088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2087188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2087288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2087388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2087488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f080: {
2087588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa10f080
2087688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00600000) {
2087788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2087888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfa10f080
2087988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
2088088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
2088188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfa1ff080
2088288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2088388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2088488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
2088588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((amount == 0) &&
2088688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
2088788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
2088888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // UXTH{<c>}.W {<Rd>}, <Rm> ; T2
2088988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uxth(CurrentCond(),
2089088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
2089188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2089288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm));
2089388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfffff0c0) != 0xfa1ff080)) {
2089488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2089588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2089688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
20897d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // UXTH{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; T2 NOLINT(whitespace/line_length)
2089888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uxth(CurrentCond(),
2089988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
2090088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2090188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm), ROR, amount));
2090288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfffff0c0) != 0xfa1ff080)) {
2090388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2090488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2090588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2090688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2090788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2090888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2090988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
2091088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2091188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2091288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2091388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2091488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2091588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2091688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
20917d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // UXTAH{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; T1 NOLINT(whitespace/line_length)
2091888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uxtah(CurrentCond(),
2091988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
2092088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
2092188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm), ROR, amount));
2092288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0c0) != 0xfa10f080)) {
2092388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2092488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2092588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2092688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2092788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2092888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2092988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2093088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00200000: {
2093188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfa30f080
2093288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
2093388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
2093488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfa3ff080
2093588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2093688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2093788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
20938d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // UXTB16{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; T1 NOLINT(whitespace/line_length)
2093988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uxtb16(CurrentCond(),
2094088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2094188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm), ROR, amount));
2094288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfffff0c0) != 0xfa3ff080)) {
2094388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2094488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2094588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2094688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2094788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2094888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
2094988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2095088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2095188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2095288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2095388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2095488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2095588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
20956d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // UXTAB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; T1 NOLINT(whitespace/line_length)
2095788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uxtab16(CurrentCond(),
2095888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rd),
2095988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rn),
2096088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Operand(Register(rm), ROR, amount));
2096188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0c0) != 0xfa30f080)) {
2096288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2096388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2096488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2096588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2096688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2096788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2096888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2096988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00400000: {
2097088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfa50f080
2097188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
2097288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
2097388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfa5ff080
2097488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2097588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2097688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
2097788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((amount == 0) &&
2097888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((rd < kNumberOfT32LowRegisters) &&
2097988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (rm < kNumberOfT32LowRegisters))) {
2098088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // UXTB{<c>}.W {<Rd>}, <Rm> ; T2
2098188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uxtb(CurrentCond(),
2098288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Wide,
2098388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2098488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm));
2098588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfffff0c0) != 0xfa5ff080)) {
2098688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2098788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2098888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
20989d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // UXTB{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; T2 NOLINT(whitespace/line_length)
2099088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uxtb(CurrentCond(),
2099188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Best,
2099288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rd),
2099388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Operand(Register(rm), ROR, amount));
2099488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfffff0c0) != 0xfa5ff080)) {
2099588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2099688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2099788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2099888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2099988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2100188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000)) {
2100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2100388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2100488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = (instr >> 8) & 0xf;
2100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2100788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = instr & 0xf;
2100888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t amount = ((instr >> 4) & 0x3) * 8;
21009d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // UXTAB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; T1 NOLINT(whitespace/line_length)
2101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uxtab(CurrentCond(),
2101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rd),
2101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
2101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Operand(Register(rm), ROR, amount));
2101488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xfff0f0c0) != 0xfa50f080)) {
2101588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2101888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2102188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
210224339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                        default:
2102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
2102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2102588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
210284339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2102988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2103088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2103188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2103288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2103388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2103488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x10800000: {
2103588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfa800000
2103688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x0060f0f0) {
2103788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f000: {
2103888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f000
2103988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2104088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2104188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sadd8(CurrentCond(),
2104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2104688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2104788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f010: {
2105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f010
2105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2105388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2105488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2105588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qadd8(CurrentCond(),
2105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2105988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2106088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2106188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f020: {
2106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f020
2106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2106488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2106688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SHADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2106788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      shadd8(CurrentCond(),
2106888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2106988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2107088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2107188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2107288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2107388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f040: {
2107488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f040
2107588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2107688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2107788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2107888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2107988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uadd8(CurrentCond(),
2108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2108388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2108488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2108588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f050: {
2108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f050
2108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2108888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UQADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uqadd8(CurrentCond(),
2109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2109588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2109688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f060: {
2109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f060
2109988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2110088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2110188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2110288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UHADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2110388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uhadd8(CurrentCond(),
2110488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2110588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2110688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2110788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2110888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2110988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f080: {
2111088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f080
2111188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2111288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2111388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2111488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QADD{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; T1
2111588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qadd(CurrentCond(),
2111688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2111788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
2111888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn));
2111988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2112088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2112188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f090: {
2112288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f090
2112388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2112488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2112588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2112688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QDADD{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; T1
2112788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qdadd(CurrentCond(),
2112888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm),
2113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn));
2113188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2113288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2113388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f0a0: {
2113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f0a0
2113588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2113688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2113788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QSUB{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; T1
2113988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qsub(CurrentCond(),
2114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2114188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
2114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn));
2114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2114588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f0b0: {
2114688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa80f0b0
2114788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2114988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2115088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QDSUB{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; T1
2115188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qdsub(CurrentCond(),
2115288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2115388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm),
2115488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn));
2115588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2115688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0020f000: {
2115888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfaa0f000
2115988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2116088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2116188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sasx(CurrentCond(),
2116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2116588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
2116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
2116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2116988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0020f010: {
2117088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfaa0f010
2117188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2117388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2117588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qasx(CurrentCond(),
2117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
2117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
2117988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2118088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0020f020: {
2118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfaa0f020
2118388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2118488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2118588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2118688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SHASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2118788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      shasx(CurrentCond(),
2118888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2118988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2119088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2119188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2119288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2119388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0020f040: {
2119488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfaa0f040
2119588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2119688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2119788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2119888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2119988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uasx(CurrentCond(),
2120088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2120188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
2120288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
2120388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2120488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2120588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0020f050: {
2120688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfaa0f050
2120788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2120888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2120988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2121088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UQASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2121188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uqasx(CurrentCond(),
2121288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2121388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2121488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2121588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2121688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2121788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0020f060: {
2121888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfaa0f060
2121988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2122088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2122188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2122288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UHASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2122388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uhasx(CurrentCond(),
2122488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2122588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2122688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2122788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2122888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2122988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0020f080: {
2123088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfaa0f080
2123188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2123288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2123388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2123488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SEL{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2123588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sel(CurrentCond(),
2123688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
2123788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rn),
2123888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm));
2123988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2124088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2124188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f000: {
2124288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f000
2124388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2124488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2124588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2124688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2124788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      ssub8(CurrentCond(),
2124888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2124988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2125088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2125188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2125288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2125388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f010: {
2125488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f010
2125588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2125688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2125788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2125888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2125988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qsub8(CurrentCond(),
2126088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2126188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2126288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2126388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2126488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2126588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f020: {
2126688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f020
2126788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2126888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2126988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2127088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SHSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2127188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      shsub8(CurrentCond(),
2127288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2127388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2127488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2127588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2127688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2127788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f040: {
2127888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f040
2127988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2128088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2128188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2128288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // USUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2128388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      usub8(CurrentCond(),
2128488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2128588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2128688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2128788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2128888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2128988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f050: {
2129088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f050
2129188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2129288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2129388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2129488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UQSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2129588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uqsub8(CurrentCond(),
2129688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2129788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2129888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2129988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2130088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2130188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f060: {
2130288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f060
2130388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2130488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2130588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2130688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UHSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2130788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uhsub8(CurrentCond(),
2130888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2130988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2131088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2131188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2131288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2131388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f080: {
2131488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f080
2131588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2131688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2131788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2131888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // CRC32B{<q>} <Rd>, <Rn>, <Rm> ; T1
21319fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                      crc32b(Condition::None(),
2132088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2132188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2132288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2132388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2132488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2132588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f090: {
2132688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f090
2132788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2132888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2132988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2133088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // CRC32H{<q>} <Rd>, <Rn>, <Rm> ; T1
21331fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                      crc32h(Condition::None(),
2133288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2133388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2133488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2133588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2133688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2133788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f0a0: {
2133888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfac0f0a0
2133988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2134088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2134188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2134288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // CRC32W{<q>} <Rd>, <Rn>, <Rm> ; T1
21343fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                      crc32w(Condition::None(),
2134488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2134588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2134688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2134788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2134888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2134988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0060f000: {
2135088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfae0f000
2135188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2135288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2135388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2135488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2135588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      ssax(CurrentCond(),
2135688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2135788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
2135888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
2135988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2136088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2136188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0060f010: {
2136288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfae0f010
2136388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2136488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2136588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2136688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2136788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qsax(CurrentCond(),
2136888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2136988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
2137088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
2137188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2137288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2137388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0060f020: {
2137488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfae0f020
2137588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2137688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2137788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2137888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SHSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2137988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      shsax(CurrentCond(),
2138088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2138188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2138288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2138388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2138488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2138588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0060f040: {
2138688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfae0f040
2138788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2138888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2138988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2139088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // USAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2139188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      usax(CurrentCond(),
2139288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2139388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
2139488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
2139588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2139688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2139788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0060f050: {
2139888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfae0f050
2139988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2140088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2140188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2140288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UQSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2140388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uqsax(CurrentCond(),
2140488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2140588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2140688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2140788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2140888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2140988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0060f060: {
2141088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfae0f060
2141188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2141288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2141388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2141488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UHSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2141588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uhsax(CurrentCond(),
2141688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2141788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2141888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2141988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2142088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
214214339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2142288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2142388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2142488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2142588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2142688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2142788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x10900000: {
2142888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfa900000
2142988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x0060f0f0) {
2143088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f000: {
2143188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f000
2143288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2143388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2143488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2143588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2143688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sadd16(CurrentCond(),
2143788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2143888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2143988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2144088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2144188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2144288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f010: {
2144388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f010
2144488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2144588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2144688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2144788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2144888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qadd16(CurrentCond(),
2144988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2145088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2145188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2145288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2145388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2145488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f020: {
2145588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f020
2145688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2145788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2145888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2145988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SHADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2146088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      shadd16(CurrentCond(),
2146188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2146288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2146388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2146488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2146588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2146688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f040: {
2146788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f040
2146888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2146988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2147088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2147188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2147288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uadd16(CurrentCond(),
2147388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2147488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2147588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2147688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2147788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2147888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f050: {
2147988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f050
2148088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2148188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2148288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2148388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UQADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2148488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uqadd16(CurrentCond(),
2148588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2148688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2148788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2148888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2148988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2149088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f060: {
2149188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f060
2149288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2149388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2149488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2149588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UHADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2149688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uhadd16(CurrentCond(),
2149788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2149888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2149988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2150088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2150188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2150288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f080: {
2150388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f080
2150488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 16) & 0xf) == (instr & 0xf)) {
2150588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 8) & 0xf;
2150688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
2150788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((rd < kNumberOfT32LowRegisters) &&
2150888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (rm < kNumberOfT32LowRegisters)) {
2150988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // REV{<c>}.W <Rd>, <Rm> ; T2
2151088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rev(CurrentCond(), Wide, Register(rd), Register(rm));
2151188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
2151288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // REV{<c>}{<q>} <Rd>, <Rm> ; T2
2151388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rev(CurrentCond(), Best, Register(rd), Register(rm));
2151488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2151588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
2151688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2151788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2151888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2151988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2152088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f090: {
2152188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f090
2152288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 16) & 0xf) == (instr & 0xf)) {
2152388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 8) & 0xf;
2152488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
2152588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((rd < kNumberOfT32LowRegisters) &&
2152688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (rm < kNumberOfT32LowRegisters)) {
2152788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // REV16{<c>}.W <Rd>, <Rm> ; T2
2152888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rev16(CurrentCond(),
2152988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
2153088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2153188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2153288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
2153388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // REV16{<c>}{<q>} <Rd>, <Rm> ; T2
2153488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rev16(CurrentCond(),
2153588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
2153688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2153788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2153888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2153988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
2154088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2154188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2154288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2154388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2154488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f0a0: {
2154588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f0a0
2154688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 16) & 0xf) == (instr & 0xf)) {
2154788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 8) & 0xf;
2154888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
2154988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // RBIT{<c>}{<q>} <Rd>, <Rm> ; T1
2155088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        rbit(CurrentCond(), Register(rd), Register(rm));
2155188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
2155288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2155388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2155488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2155588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2155688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0000f0b0: {
2155788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfa90f0b0
2155888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 16) & 0xf) == (instr & 0xf)) {
2155988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 8) & 0xf;
2156088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
2156188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((rd < kNumberOfT32LowRegisters) &&
2156288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (rm < kNumberOfT32LowRegisters)) {
2156388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // REVSH{<c>}.W <Rd>, <Rm> ; T2
2156488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          revsh(CurrentCond(),
2156588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
2156688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2156788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2156888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
2156988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // REVSH{<c>}{<q>} <Rd>, <Rm> ; T2
2157088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          revsh(CurrentCond(),
2157188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
2157288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2157388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2157488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2157588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
2157688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2157788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2157888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2157988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2158088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0020f080: {
2158188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfab0f080
2158288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 16) & 0xf) == (instr & 0xf)) {
2158388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 8) & 0xf;
2158488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
2158588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // CLZ{<c>}{<q>} <Rd>, <Rm> ; T1
2158688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        clz(CurrentCond(), Register(rd), Register(rm));
2158788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      } else {
2158888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2158988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2159088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2159188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2159288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f000: {
2159388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f000
2159488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2159588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2159688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2159788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2159888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      ssub16(CurrentCond(),
2159988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2160088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2160188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2160288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2160388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2160488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f010: {
2160588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f010
2160688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2160788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2160888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2160988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // QSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2161088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      qsub16(CurrentCond(),
2161188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2161288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2161388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2161488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2161588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2161688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f020: {
2161788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f020
2161888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2161988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2162088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2162188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SHSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2162288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      shsub16(CurrentCond(),
2162388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2162488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2162588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2162688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2162788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2162888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f040: {
2162988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f040
2163088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2163188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2163288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2163388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // USUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2163488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      usub16(CurrentCond(),
2163588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2163688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2163788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2163888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2163988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2164088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f050: {
2164188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f050
2164288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2164388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2164488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2164588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UQSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2164688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uqsub16(CurrentCond(),
2164788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2164888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2164988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2165088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2165188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2165288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f060: {
2165388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f060
2165488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2165588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2165688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2165788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UHSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2165888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uhsub16(CurrentCond(),
2165988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2166088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2166188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2166288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2166388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2166488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f080: {
2166588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f080
2166688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2166788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2166888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2166988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // CRC32CB{<q>} <Rd>, <Rn>, <Rm> ; T1
21670fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                      crc32cb(Condition::None(),
2167188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2167288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2167388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2167488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2167588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2167688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f090: {
2167788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f090
2167888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2167988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2168088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2168188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // CRC32CH{<q>} <Rd>, <Rn>, <Rm> ; T1
21682fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                      crc32ch(Condition::None(),
2168388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2168488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2168588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2168688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2168788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2168888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x0040f0a0: {
2168988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfad0f0a0
2169088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2169188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2169288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2169388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // CRC32CW{<q>} <Rd>, <Rn>, <Rm> ; T1
21694fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                      crc32cw(Condition::None(),
2169588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2169688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2169788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2169888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2169988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
217004339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2170188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2170288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2170388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2170488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2170588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2170688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x11000000: {
2170788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfb000000
2170888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x006000f0) {
2170988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2171088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb000000
2171188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2171288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2171388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb00f000
2171488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2171588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2171688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2171788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (InITBlock() &&
2171888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((rd == rm) && (rd < kNumberOfT32LowRegisters) &&
2171988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               (rn < kNumberOfT32LowRegisters))) {
2172088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // MUL<c>.W <Rd>, <Rn>, {<Rm>} ; T2
2172188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            mul(CurrentCond(),
2172288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Wide,
2172388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2172488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2172588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2172688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2172788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // MUL{<c>}{<q>} <Rd>, <Rn>, {<Rm>} ; T2
2172888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            mul(CurrentCond(),
2172988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
2173088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2173188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2173288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2173388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2173488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2173588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2173688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2173788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2173888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2173988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2174088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2174188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2174288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2174388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2174488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2174588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // MLA{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2174688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          mla(CurrentCond(),
2174788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
2174888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2174988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm),
2175088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(ra));
2175188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2175288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2175388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2175488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2175588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2175688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000010: {
2175788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb000010
2175888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2175988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2176088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2176188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned ra = (instr >> 12) & 0xf;
2176288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // MLS{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2176388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      mls(CurrentCond(),
2176488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
2176588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rn),
2176688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm),
2176788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(ra));
2176888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2176988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2177088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2177188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb200000
2177288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2177388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2177488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb20f000
2177588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2177688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2177788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2177888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMUAD{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2177988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smuad(CurrentCond(),
2178088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2178188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2178288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2178388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2178488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2178588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2178688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2178788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2178888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2178988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2179088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2179188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2179288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2179388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2179488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLAD{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2179588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlad(CurrentCond(),
2179688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2179788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2179888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2179988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(ra));
2180088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2180188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2180288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2180388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2180488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2180588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200010: {
2180688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb200010
2180788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2180888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2180988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb20f010
2181088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2181188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2181288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2181388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMUADX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2181488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smuadx(CurrentCond(),
2181588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2181688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2181788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2181888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2181988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2182088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2182188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2182288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2182388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2182488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2182588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2182688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2182788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2182888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2182988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLADX{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2183088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smladx(CurrentCond(),
2183188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2183288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2183388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2183488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2183588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2183688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2183788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2183888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2183988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2184088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
2184188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb400000
2184288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2184388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2184488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb40f000
2184588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2184688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2184788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2184888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMUSD{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2184988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smusd(CurrentCond(),
2185088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2185188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2185288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2185388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2185488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2185588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2185688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2185788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2185888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2185988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2186088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2186188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2186288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2186388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2186488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLSD{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2186588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlsd(CurrentCond(),
2186688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2186788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2186888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2186988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(ra));
2187088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2187188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2187288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2187388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2187488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2187588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400010: {
2187688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb400010
2187788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2187888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2187988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb40f010
2188088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2188188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2188288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2188388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMUSDX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2188488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smusdx(CurrentCond(),
2188588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2188688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2188788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2188888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2188988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2189088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2189188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2189288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2189388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2189488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2189588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2189688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2189788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2189888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2189988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLSDX{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2190088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlsdx(CurrentCond(),
2190188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2190288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2190388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2190488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2190588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2190688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2190788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2190888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2190988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2191088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
2191188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb600000
2191288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2191388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2191488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2191588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned ra = (instr >> 12) & 0xf;
2191688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMMLS{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2191788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smmls(CurrentCond(),
2191888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
2191988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2192088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm),
2192188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(ra));
2192288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2192388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2192488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600010: {
2192588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb600010
2192688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2192788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2192888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2192988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned ra = (instr >> 12) & 0xf;
2193088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMMLSR{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2193188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smmlsr(CurrentCond(),
2193288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
2193388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2193488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm),
2193588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(ra));
2193688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2193788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
219384339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2193988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2194088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2194188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2194288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2194388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2194488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x11100000: {
2194588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfb100000
2194688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x006000f0) {
2194788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2194888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb100000
2194988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2195088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2195188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb10f000
2195288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2195388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2195488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2195588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMULBB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2195688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smulbb(CurrentCond(),
2195788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2195888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2195988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2196088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2196188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2196288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2196388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2196488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2196588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2196688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2196788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2196888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2196988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2197088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2197188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLABB{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2197288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlabb(CurrentCond(),
2197388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2197488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2197588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2197688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2197788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2197888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2197988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2198088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2198188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2198288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000010: {
2198388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb100010
2198488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2198588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2198688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb10f010
2198788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2198888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2198988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2199088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMULBT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2199188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smulbt(CurrentCond(),
2199288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2199388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2199488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2199588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2199688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2199788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2199888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2199988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2200088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2200188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2200288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2200388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2200488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2200588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2200688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLABT{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2200788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlabt(CurrentCond(),
2200888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2200988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2201088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2201188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2201288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2201388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2201488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2201588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2201688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2201788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000020: {
2201888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb100020
2201988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2202088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2202188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb10f020
2202288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2202388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2202488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2202588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMULTB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2202688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smultb(CurrentCond(),
2202788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2202888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2202988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2203088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2203188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2203288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2203388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2203488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2203588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2203688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2203788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2203888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2203988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2204088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2204188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLATB{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2204288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlatb(CurrentCond(),
2204388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2204488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2204588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2204688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2204788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2204888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2204988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2205088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2205188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2205288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000030: {
2205388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb100030
2205488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2205588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2205688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb10f030
2205788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2205888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2205988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2206088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMULTT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2206188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smultt(CurrentCond(),
2206288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2206388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2206488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2206588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2206688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2206788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2206888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2206988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2207088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2207188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2207288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2207388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2207488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2207588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2207688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLATT{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2207788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlatt(CurrentCond(),
2207888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2207988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2208088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2208188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2208288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2208388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2208488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2208588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2208688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2208788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2208888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb300000
2208988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2209088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2209188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb30f000
2209288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2209388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2209488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2209588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMULWB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2209688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smulwb(CurrentCond(),
2209788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2209888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2209988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2210088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2210188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2210288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2210388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2210488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2210588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2210688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2210788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2210888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2210988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2211088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2211188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLAWB{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2211288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlawb(CurrentCond(),
2211388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2211488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2211588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2211688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2211788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2211888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2211988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2212088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2212188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2212288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200010: {
2212388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb300010
2212488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2212588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2212688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb30f010
2212788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2212888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2212988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2213088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMULWT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2213188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smulwt(CurrentCond(),
2213288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2213388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2213488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2213588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2213688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2213788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2213888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2213988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2214088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2214188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2214288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2214388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2214488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2214588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2214688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMLAWT{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2214788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smlawt(CurrentCond(),
2214888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2214988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2215088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2215188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2215288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2215388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2215488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2215588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2215688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2215788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
2215888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb500000
2215988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2216088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2216188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb50f000
2216288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2216388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2216488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2216588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMMUL{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2216688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smmul(CurrentCond(),
2216788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2216888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2216988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2217088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2217188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2217288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2217388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2217488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2217588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2217688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2217788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2217888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2217988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2218088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2218188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMMLA{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2218288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smmla(CurrentCond(),
2218388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2218488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2218588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
2218688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(ra));
2218788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2218888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2218988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2219088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2219188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2219288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400010: {
2219388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb500010
2219488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2219588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2219688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb50f010
2219788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2219888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2219988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2220088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMMULR{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2220188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smmulr(CurrentCond(),
2220288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2220388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2220488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm));
2220588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2220688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2220788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2220888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2220988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2221088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2221188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2221288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2221388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2221488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2221588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2221688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SMMLAR{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2221788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          smmlar(CurrentCond(),
2221888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2221988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2222088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2222188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2222288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2222388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2222488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2222588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2222688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2222788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
2222888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb700000
2222988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x0000f000) {
2223088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x0000f000: {
2223188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfb70f000
2223288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2223388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2223488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2223588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // USAD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2223688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          usad8(CurrentCond(),
2223788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
2223888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
2223988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
2224088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2224188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2224288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2224388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf000) == 0xf000)) {
2224488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2224588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2224688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2224788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 8) & 0xf;
2224888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2224988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
2225088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned ra = (instr >> 12) & 0xf;
2225188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // USADA8{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; T1
2225288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          usada8(CurrentCond(),
2225388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rd),
2225488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rn),
2225588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rm),
2225688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(ra));
2225788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2225888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2225988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2226088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2226188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
222624339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2226388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2226488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2226588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2226688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2226788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2226888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x11800000: {
2226988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfb800000
2227088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x006000f0) {
2227188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2227288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb800000
2227388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2227488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2227588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2227688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2227788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMULL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2227888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smull(CurrentCond(),
2227988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdlo),
2228088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdhi),
2228188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2228288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2228388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2228488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2228588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2228688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfba00000
2228788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2228888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2228988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2229088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2229188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UMULL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2229288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      umull(CurrentCond(),
2229388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdlo),
2229488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdhi),
2229588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2229688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2229788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2229888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2229988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400000: {
2230088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbc00000
2230188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2230288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2230388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2230488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2230588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLAL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2230688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlal(CurrentCond(),
2230788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdlo),
2230888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdhi),
2230988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2231088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2231188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2231288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2231388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400080: {
2231488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbc00080
2231588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2231688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2231788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2231888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2231988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLALBB{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2232088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlalbb(CurrentCond(),
2232188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
2232288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
2232388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2232488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2232588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2232688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2232788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00400090: {
2232888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbc00090
2232988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2233088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2233188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2233288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2233388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLALBT{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2233488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlalbt(CurrentCond(),
2233588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
2233688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
2233788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2233888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2233988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2234088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2234188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x004000a0: {
2234288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbc000a0
2234388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2234488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2234588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2234688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2234788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLALTB{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2234888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlaltb(CurrentCond(),
2234988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
2235088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
2235188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2235288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2235388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2235488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2235588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x004000b0: {
2235688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbc000b0
2235788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2235888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2235988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2236088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2236188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLALTT{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2236288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlaltt(CurrentCond(),
2236388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
2236488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
2236588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2236688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2236788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2236888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2236988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x004000c0: {
2237088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbc000c0
2237188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2237288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2237388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2237488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2237588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLALD{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2237688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlald(CurrentCond(),
2237788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rdlo),
2237888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rdhi),
2237988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2238088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2238188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2238288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2238388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x004000d0: {
2238488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbc000d0
2238588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2238688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2238788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2238888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2238988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLALDX{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2239088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlaldx(CurrentCond(),
2239188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
2239288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
2239388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2239488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2239588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2239688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2239788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600000: {
2239888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbe00000
2239988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2240088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2240188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2240288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2240388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UMLAL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2240488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      umlal(CurrentCond(),
2240588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdlo),
2240688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdhi),
2240788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2240888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2240988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2241088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2241188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00600060: {
2241288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbe00060
2241388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2241488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2241588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2241688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2241788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UMAAL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2241888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      umaal(CurrentCond(),
2241988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdlo),
2242088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdhi),
2242188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
2242288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
2242388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2242488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
224254339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2242688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2242788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2242888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2242988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2243088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2243188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x11900000: {
2243288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfb900000
2243388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x006000f0) {
2243488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x000000f0: {
2243588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfb9000f0
2243688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2243788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2243888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2243988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SDIV{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2244088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      sdiv(CurrentCond(),
2244188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2244288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
2244388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
2244488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff0f0f0) != 0xfb90f0f0)) {
2244588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableT32(instr);
2244688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2244788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2244888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2244988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x002000f0: {
2245088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbb000f0
2245188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 8) & 0xf;
2245288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2245388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2245488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // UDIV{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; T1
2245588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      udiv(CurrentCond(),
2245688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
2245788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
2245888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
2245988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff0f0f0) != 0xfbb0f0f0)) {
2246088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableT32(instr);
2246188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2246288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2246388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2246488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x004000c0: {
2246588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbd000c0
2246688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2246788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2246888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2246988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2247088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLSLD{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2247188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlsld(CurrentCond(),
2247288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rdlo),
2247388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rdhi),
2247488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
2247588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
2247688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2247788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2247888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x004000d0: {
2247988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfbd000d0
2248088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdlo = (instr >> 12) & 0xf;
2248188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rdhi = (instr >> 8) & 0xf;
2248288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = (instr >> 16) & 0xf;
2248388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
2248488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // SMLSLDX{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; T1
2248588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      smlsldx(CurrentCond(),
2248688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
2248788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
2248888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
2248988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
2249088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2249188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
224924339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                    default:
2249388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedT32(instr);
2249488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2249588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2249688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2249788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2249888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
2249988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
2250088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
2250188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x04000000: {
2250288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xec000000
2250388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x11100000) {
2250488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
2250588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xec000000
2250688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00000e00) {
2250788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000a00: {
2250888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xec000a00
2250988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00800100) {
2251088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2251188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec000a00
2251288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x006000d0) == 0x00400010) {
2251388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractSRegister(instr, 5, 0);
2251488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
2251588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt2 = (instr >> 16) & 0xf;
2251688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VMOV{<c>}{<q>} <Sm>, <Sm1>, <Rt>, <Rt2> ; T1
2251788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmov(CurrentCond(),
2251888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rm),
2251988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rm + 1),
2252088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
2252188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt2));
2252288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2252388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2252488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2252588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2252688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2252788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000100: {
2252888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec000b00
2252988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x006000d0) == 0x00400010) {
2253088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
2253188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
2253288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt2 = (instr >> 16) & 0xf;
2253388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VMOV{<c>}{<q>} <Dm>, <Rt>, <Rt2> ; T1
2253488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmov(CurrentCond(),
2253588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rm),
2253688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
2253788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt2));
2253888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2253988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2254088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2254188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2254288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2254388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800000: {
2254488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec800a00
2254588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2254688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back((instr >> 21) & 0x1);
2254788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned first = ExtractSRegister(instr, 22, 12);
2254888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned len = instr & 0xff;
2254988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VSTM{<c>}{<q>}{.<size>} <Rn>{!}, <sreglist> ; T2
2255088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vstm(CurrentCond(),
2255188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               kDataTypeValueNone,
2255288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
2255388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               write_back,
2255471bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                               SRegisterList(SRegister(first), len));
2255588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((len == 0) ||
2255688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((first + len) > kNumberOfSRegisters)) {
2255788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
2255888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2255988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2256088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2256188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800100: {
2256288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec800b00
2256388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000001) {
2256488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2256588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xec800b00
2256688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2256788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              WriteBack write_back((instr >> 21) & 0x1);
2256888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
2256988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned imm8 = (instr & 0xff);
2257088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned len = imm8 / 2;
2257188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned end = first + len;
22572d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VSTM{<c>}{<q>}{.<size>} <Rn>{!}, <dreglist> ; T1 NOLINT(whitespace/line_length)
2257388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vstm(CurrentCond(),
2257488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
2257588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
2257688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   write_back,
2257771bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                   DRegisterList(DRegister(first), len));
2257888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((len == 0) || (len > 16) ||
2257988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (end > kMaxNumberOfDRegisters)) {
2258088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2258188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2258288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2258388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2258488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000001: {
2258588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xec800b01
2258688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2258788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              WriteBack write_back((instr >> 21) & 0x1);
2258888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
2258988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned imm8 = (instr & 0xff);
2259088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned len = imm8 / 2;
2259188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned end = first + len;
2259288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // FSTMIAX{<c>}{<q>} <Rn>{!}, <dreglist> ; T1
2259388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              fstmiax(CurrentCond(),
2259488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rn),
2259588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      write_back,
2259671bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                      DRegisterList(DRegister(first), len));
2259788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((len == 0) || (len > 16) || (end > 16)) {
2259888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2259988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2260088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2260188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2260288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2260388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2260488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2260588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2260688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2260788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2260888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    default: {
2260988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00200000) {
2261088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2261188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec000000
2261288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00800000) {
2261388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2261488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xec000000
2261588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00400000) == 0x00400000) {
2261688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xe00) == 0xa00)) {
2261788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2261888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
2261988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2262088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnimplementedT32_32("MCRR", instr);
2262188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2262288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2262388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2262488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2262588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2262688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800000: {
2262788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xec800000
2262888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xe00) == 0xa00)) {
2262988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2263088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2263188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2263288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("STC", instr);
2263388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2263488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2263588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2263688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2263788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2263888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00200000: {
2263988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec200000
2264088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xe00) == 0xa00)) {
2264188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2264288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2264388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2264488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("STC", instr);
2264588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2264688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2264788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2264888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2264988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2265088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2265188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2265288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2265388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00100000: {
2265488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xec100000
2265588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00000e00) {
2265688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000a00: {
2265788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xec100a00
2265888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00800100) {
2265988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2266088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec100a00
2266188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x006000d0) == 0x00400010) {
2266288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
2266388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt2 = (instr >> 16) & 0xf;
2266488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractSRegister(instr, 5, 0);
2266588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VMOV{<c>}{<q>} <Rt>, <Rt2>, <Sm>, <Sm1> ; T1
2266688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmov(CurrentCond(),
2266788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
2266888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt2),
2266988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rm),
2267088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rm + 1));
2267188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2267288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2267388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2267488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2267588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2267688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000100: {
2267788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec100b00
2267888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x006000d0) == 0x00400010) {
2267988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
2268088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt2 = (instr >> 16) & 0xf;
2268188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
2268288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VMOV{<c>}{<q>} <Rt>, <Rt2>, <Dm> ; T1
2268388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmov(CurrentCond(),
2268488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
2268588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt2),
2268688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rm));
2268788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2268888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2268988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2269088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2269188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2269288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800000: {
2269388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec900a00
2269488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((Uint32((instr >> 21)) & Uint32(0x1)) ==
2269588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Uint32(0x1)) &&
2269688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((Uint32((instr >> 16)) & Uint32(0xf)) ==
2269788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Uint32(0xd))) {
2269888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractSRegister(instr, 22, 12);
2269988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned len = instr & 0xff;
2270088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VPOP{<c>}{<q>}{.<size>} <sreglist> ; T2
2270188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vpop(CurrentCond(),
2270288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 kDataTypeValueNone,
2270371bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                 SRegisterList(SRegister(first), len));
2270488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((len == 0) ||
2270588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((first + len) > kNumberOfSRegisters)) {
2270688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableT32(instr);
2270788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2270888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2270988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2271088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = (instr >> 16) & 0xf;
2271188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          WriteBack write_back((instr >> 21) & 0x1);
2271288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned first = ExtractSRegister(instr, 22, 12);
2271388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned len = instr & 0xff;
2271488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VLDM{<c>}{<q>}{.<size>} <Rn>{!}, <sreglist> ; T2
2271588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vldm(CurrentCond(),
2271688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               kDataTypeValueNone,
2271788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
2271888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               write_back,
2271971bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                               SRegisterList(SRegister(first), len));
2272088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((len == 0) ||
2272188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((first + len) > kNumberOfSRegisters)) {
2272288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableT32(instr);
2272388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2272488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2272588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2272688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800100: {
2272788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec900b00
2272888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000001) {
2272988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2273088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xec900b00
2273188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 21)) & Uint32(0x1)) ==
2273288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0x1)) &&
2273388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((Uint32((instr >> 16)) & Uint32(0xf)) ==
2273488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0xd))) {
2273588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
2273688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
2273788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned imm8 = (instr & 0xff);
2273888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned len = imm8 / 2;
2273988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned end = first + len;
2274088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VPOP{<c>}{<q>}{.<size>} <dreglist> ; T1
2274188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vpop(CurrentCond(),
2274288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     kDataTypeValueNone,
2274371bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                     DRegisterList(DRegister(first), len));
2274488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((len == 0) || (len > 16) ||
2274588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (end > kMaxNumberOfDRegisters)) {
2274688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2274788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2274888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2274988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2275088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2275188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              WriteBack write_back((instr >> 21) & 0x1);
2275288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
2275388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned imm8 = (instr & 0xff);
2275488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned len = imm8 / 2;
2275588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned end = first + len;
22756d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLDM{<c>}{<q>}{.<size>} <Rn>{!}, <dreglist> ; T1 NOLINT(whitespace/line_length)
2275788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vldm(CurrentCond(),
2275888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
2275988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
2276088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   write_back,
2276171bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                   DRegisterList(DRegister(first), len));
2276288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((len == 0) || (len > 16) ||
2276388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (end > kMaxNumberOfDRegisters)) {
2276488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2276588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2276688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2276788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2276888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000001: {
2276988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xec900b01
2277088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2277188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              WriteBack write_back((instr >> 21) & 0x1);
2277288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
2277388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned imm8 = (instr & 0xff);
2277488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned len = imm8 / 2;
2277588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned end = first + len;
2277688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // FLDMIAX{<c>}{<q>} <Rn>{!}, <dreglist> ; T1
2277788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              fldmiax(CurrentCond(),
2277888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Register(rn),
2277988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      write_back,
2278071bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                      DRegisterList(DRegister(first), len));
2278188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((len == 0) || (len > 16) || (end > 16)) {
2278288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2278388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2278488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2278588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2278688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2278788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2278888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2278988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2279088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2279188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2279288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    default: {
2279388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00200000) {
2279488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2279588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec100000
2279688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00800000) {
2279788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2279888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xec100000
2279988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00400000) == 0x00400000) {
2280088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xe00) == 0xa00)) {
2280188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2280288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
2280388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2280488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnimplementedT32_32("MRRC", instr);
2280588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2280688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2280788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2280888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2280988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2281088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800000: {
2281188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xec900000
2281288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000) ||
2281388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe00) == 0xa00)) {
2281488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2281588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2281688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2281788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("LDC", instr);
2281888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2281988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2282088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2282188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2282288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2282388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00200000: {
2282488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xec300000
2282588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000) ||
2282688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr & 0xe00) == 0xa00)) {
2282788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2282888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2282988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2283088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("LDC", instr);
2283188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2283288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2283388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2283488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2283588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2283688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2283788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2283888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2283988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01000000: {
2284088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xed000000
2284188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00200000) {
2284288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2284388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xed000000
2284488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000e00) {
2284588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2284688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xed000a00
2284788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000100) {
2284888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2284988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xed000a00
2285088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2285188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2285288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Sign sign((((instr >> 23) & 0x1) == 0) ? minus
2285388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     : plus);
2285488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = (instr & 0xff) << 2;
22855d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VSTR{<c>}{<q>}{.32} <Sd>, [<Rn>{, #{+/-}<imm>}] ; T2 NOLINT(whitespace/line_length)
2285688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vstr(CurrentCond(),
2285788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
2285888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2285988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
2286088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
2286188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              offset,
2286288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Offset));
2286388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2286488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2286588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
2286688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xed000b00
2286788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2286888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2286988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Sign sign((((instr >> 23) & 0x1) == 0) ? minus
2287088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                     : plus);
2287188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int32_t offset = (instr & 0xff) << 2;
22872d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VSTR{<c>}{<q>}{.64} <Dd>, [<Rn>{, #{+/-}<imm>}] ; T1 NOLINT(whitespace/line_length)
2287388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vstr(CurrentCond(),
2287488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
2287588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2287688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn),
2287788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              sign,
2287888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              offset,
2287988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Offset));
2288088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2288188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2288288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2288388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2288488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2288588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2288688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xe00) == 0xa00)) {
2288788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2288888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2288988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2289088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("STC", instr);
2289188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2289288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2289388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2289488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2289588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2289688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2289788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xed200000
2289888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000e00) {
2289988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2290088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xed200a00
2290188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00800100) {
2290288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2290388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xed200a00
2290488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((Uint32((instr >> 16)) & Uint32(0xf)) ==
2290588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Uint32(0xd))) {
2290688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
2290788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractSRegister(instr, 22, 12);
2290888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned len = instr & 0xff;
2290988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VPUSH{<c>}{<q>}{.<size>} <sreglist> ; T2
2291088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vpush(CurrentCond(),
2291188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      kDataTypeValueNone,
2291271bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                      SRegisterList(SRegister(first), len));
2291388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((len == 0) ||
2291488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((first + len) > kNumberOfSRegisters)) {
2291588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2291688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2291788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2291888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2291988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2292088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractSRegister(instr, 22, 12);
2292188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned len = instr & 0xff;
22922d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VSTMDB{<c>}{<q>}{.<size>} <Rn>!, <sreglist> ; T2 NOLINT(whitespace/line_length)
2292388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vstmdb(CurrentCond(),
2292488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     kDataTypeValueNone,
2292588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
2292688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     WriteBack(WRITE_BACK),
2292771bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                     SRegisterList(SRegister(first), len));
2292888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((len == 0) ||
2292988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((first + len) > kNumberOfSRegisters)) {
2293088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2293188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2293288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2293388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2293488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
2293588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xed200b00
2293688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000001) {
2293788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2293888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xed200b00
2293988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((Uint32((instr >> 16)) & Uint32(0xf)) ==
2294088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Uint32(0xd))) {
2294188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned first =
2294288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
2294388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned imm8 = (instr & 0xff);
2294488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned len = imm8 / 2;
2294588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned end = first + len;
2294688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VPUSH{<c>}{<q>}{.<size>} <dreglist> ; T1
2294788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vpush(CurrentCond(),
2294888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          kDataTypeValueNone,
2294971bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                          DRegisterList(DRegister(first), len));
2295088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((len == 0) || (len > 16) ||
2295188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        (end > kMaxNumberOfDRegisters)) {
2295288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnpredictableT32(instr);
2295388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2295488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2295588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2295688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
2295788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
2295888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
2295988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned imm8 = (instr & 0xff);
2296088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned len = imm8 / 2;
2296188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned end = first + len;
22962d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VSTMDB{<c>}{<q>}{.<size>} <Rn>!, <dreglist> ; T1 NOLINT(whitespace/line_length)
2296388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vstmdb(CurrentCond(),
2296488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         kDataTypeValueNone,
2296588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rn),
2296688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         WriteBack(WRITE_BACK),
2296771bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                         DRegisterList(DRegister(first), len));
2296888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((len == 0) || (len > 16) ||
2296988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (end > kMaxNumberOfDRegisters)) {
2297088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2297188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2297288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2297388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2297488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000001: {
2297588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xed200b01
2297688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
2297788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
2297888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
2297988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned imm8 = (instr & 0xff);
2298088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned len = imm8 / 2;
2298188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned end = first + len;
2298288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // FSTMDBX{<c>}{<q>} <Rn>!, <dreglist> ; T1
2298388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  fstmdbx(CurrentCond(),
2298488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Register(rn),
2298588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          WriteBack(WRITE_BACK),
2298671bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                          DRegisterList(DRegister(first), len));
2298788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((len == 0) || (len > 16) || (end > 16)) {
2298888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2298988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2299088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2299188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2299288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2299388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2299488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
229954339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2299688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2299788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2299888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2299988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2300088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2300188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2300288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xe00) == 0xa00)) {
2300388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2300488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2300588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2300688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("STC", instr);
2300788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2300888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2300988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2301088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2301188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2301288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2301388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2301488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2301588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01100000: {
2301688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xed100000
2301788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00200000) {
2301888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2301988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xed100000
2302088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x000f0000) {
2302188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x000f0000: {
2302288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xed1f0000
2302388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000e00) {
2302488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000a00: {
2302588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xed1f0a00
2302688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000100) {
2302788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2302888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xed1f0a00
2302988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2303088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t U = (instr >> 23) & 0x1;
2303188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t imm = instr & 0xff;
2303288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  imm <<= 2;
2303388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (U == 0) imm = -imm;
2303488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  bool minus_zero = (imm == 0) && (U == 0);
2303588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Label label(imm, kT32PcDelta, minus_zero);
2303688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VLDR{<c>}{<q>}{.32} <Sd>, <label> ; T2
2303788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vldr(CurrentCond(),
2303888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kDataTypeValueNone,
2303988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
2304088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       &label);
2304188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2304288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2304388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
2304488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xed1f0b00
2304588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
2304688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t U = (instr >> 23) & 0x1;
2304788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t imm = instr & 0xff;
2304888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  imm <<= 2;
2304988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (U == 0) imm = -imm;
2305088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  bool minus_zero = (imm == 0) && (U == 0);
2305188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Label label(imm, kT32PcDelta, minus_zero);
2305288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VLDR{<c>}{<q>}{.64} <Dd>, <label> ; T1
2305388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vldr(CurrentCond(),
2305488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kDataTypeValueNone,
2305588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2305688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       &label);
2305788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2305888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2305988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2306088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2306188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2306288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2306388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xe00) == 0xa00)) {
2306488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2306588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2306688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2306788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("LDC", instr);
2306888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2306988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2307088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2307188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2307288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2307388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2307488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000e00) {
2307588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000a00: {
2307688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xed100a00
2307788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000100) {
2307888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2307988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xed100a00
2308088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
2308188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2308288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2308388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2308488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2308588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
2308688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Sign sign((((instr >> 23) & 0x1) == 0)
2308788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ? minus
2308888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                : plus);
2308988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = (instr & 0xff) << 2;
23090d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLDR{<c>}{<q>}{.32} <Sd>, [<Rn>{, #{+/-}<imm>}] ; T2 NOLINT(whitespace/line_length)
2309188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vldr(CurrentCond(),
2309288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kDataTypeValueNone,
2309388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
2309488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
2309588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign,
2309688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  offset,
2309788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Offset));
2309888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2309988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2310088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
2310188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xed100b00
2310288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xf0000) == 0xf0000)) {
2310388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2310488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2310588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2310688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
2310788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
2310888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Sign sign((((instr >> 23) & 0x1) == 0)
2310988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ? minus
2311088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                : plus);
2311188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int32_t offset = (instr & 0xff) << 2;
23112d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLDR{<c>}{<q>}{.64} <Dd>, [<Rn>{, #{+/-}<imm>}] ; T1 NOLINT(whitespace/line_length)
2311388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vldr(CurrentCond(),
2311488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kDataTypeValueNone,
2311588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2311688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       MemOperand(Register(rn),
2311788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  sign,
2311888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  offset,
2311988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Offset));
2312088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2312188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2312288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2312388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2312488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2312588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2312688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000) ||
2312788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe00) == 0xa00)) {
2312888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2312988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2313088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2313188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("LDC", instr);
2313288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2313388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2313488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2313588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2313688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2313788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2313888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2313988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2314088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2314188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xed300000
2314288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000e00) {
2314388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2314488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xed300a00
2314588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00800100) {
2314688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2314788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xed300a00
2314888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = (instr >> 16) & 0xf;
2314988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractSRegister(instr, 22, 12);
2315088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned len = instr & 0xff;
23151d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VLDMDB{<c>}{<q>}{.<size>} <Rn>!, <sreglist> ; T2 NOLINT(whitespace/line_length)
2315288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vldmdb(CurrentCond(),
2315388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     kDataTypeValueNone,
2315488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rn),
2315588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     WriteBack(WRITE_BACK),
2315671bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                     SRegisterList(SRegister(first), len));
2315788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((len == 0) ||
2315888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((first + len) > kNumberOfSRegisters)) {
2315988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2316088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2316188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2316288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2316388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
2316488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xed300b00
2316588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000001) {
2316688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2316788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xed300b00
2316888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
2316988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
2317088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
2317188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned imm8 = (instr & 0xff);
2317288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned len = imm8 / 2;
2317388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned end = first + len;
23174d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VLDMDB{<c>}{<q>}{.<size>} <Rn>!, <dreglist> ; T1 NOLINT(whitespace/line_length)
2317588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vldmdb(CurrentCond(),
2317688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         kDataTypeValueNone,
2317788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rn),
2317888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         WriteBack(WRITE_BACK),
2317971bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                         DRegisterList(DRegister(first), len));
2318088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((len == 0) || (len > 16) ||
2318188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (end > kMaxNumberOfDRegisters)) {
2318288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2318388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2318488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2318588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2318688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000001: {
2318788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xed300b01
2318888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = (instr >> 16) & 0xf;
2318988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned first =
2319088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ExtractDRegister(instr, 22, 12);
2319188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned imm8 = (instr & 0xff);
2319288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned len = imm8 / 2;
2319388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned end = first + len;
2319488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // FLDMDBX{<c>}{<q>} <Rn>!, <dreglist> ; T1
2319588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  fldmdbx(CurrentCond(),
2319688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Register(rn),
2319788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          WriteBack(WRITE_BACK),
2319871bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                          DRegisterList(DRegister(first), len));
2319988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((len == 0) || (len > 16) || (end > 16)) {
2320088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2320188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2320288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2320388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2320488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2320588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2320688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
232074339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2320888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2320988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2321088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2321188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2321288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2321388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2321488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000) ||
2321588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr & 0xe00) == 0xa00)) {
2321688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2321788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2321888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2321988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("LDC", instr);
2322088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2322188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2322288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2322388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2322488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2322588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2322688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2322788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2322888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x10000000: {
2322988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfc000000
2323088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00200000) {
2323188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2323288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfc000000
2323388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00800000) {
2323488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2323588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfc000000
2323688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x00400000) == 0x00400000) {
2323788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe00) == 0xa00)) {
2323888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2323988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
2324088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2324188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnimplementedT32_32("MCRR2", instr);
2324288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2324388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2324488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2324588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2324688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2324788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800000: {
2324888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfc800000
2324988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xe00) == 0xa00)) {
2325088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2325188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2325288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2325388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("STC2", instr);
2325488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2325588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2325688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2325788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2325888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2325988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2326088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfc200000
2326188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xe00) == 0xa00)) {
2326288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2326388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
2326488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2326588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedT32_32("STC2", instr);
2326688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2326788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2326888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2326988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2327088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2327188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x10100000: {
2327288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfc100000
2327388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00200000) {
2327488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2327588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfc100000
2327688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00800000) {
2327788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2327888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfc100000
2327988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x00400000) == 0x00400000) {
2328088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe00) == 0xa00)) {
2328188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2328288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
2328388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2328488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnimplementedT32_32("MRRC2", instr);
2328588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
2328688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2328788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2328888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2328988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2329088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00800000: {
2329188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfc900000
2329288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000) == 0xf0000) ||
2329388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr & 0xe00) == 0xa00)) {
2329488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2329588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2329688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2329788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("LDC2", instr);
2329888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2329988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2330088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2330188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2330288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2330388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2330488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfc300000
2330588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xf0000) == 0xf0000) ||
2330688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr & 0xe00) == 0xa00)) {
2330788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2330888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
2330988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2331088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedT32_32("LDC2", instr);
2331188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2331288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2331388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2331488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2331588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2331688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x11000000: {
2331788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfd000000
2331888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00200000) {
2331988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2332088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfd000000
2332188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xe00) == 0xa00)) {
2332288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2332388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
2332488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2332588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedT32_32("STC2", instr);
2332688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2332788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2332888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2332988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfd200000
2333088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xe00) == 0xa00)) {
2333188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2333288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
2333388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2333488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedT32_32("STC2", instr);
2333588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2333688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2333788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2333888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2333988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2334088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x11100000: {
2334188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xfd100000
2334288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00200000) {
2334388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2334488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfd100000
2334588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000e00) {
2334688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2334788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfd100a00
2334888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
2334988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2335088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2335188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2335288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x000f0000) {
2335388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x000f0000: {
2335488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfd1f0000
2335588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xe00) == 0xa00)) {
2335688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2335788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2335888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2335988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("LDC2", instr);
2336088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2336188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2336288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
2336388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000) == 0xf0000) ||
2336488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr & 0xe00) == 0xa00)) {
2336588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2336688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2336788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2336888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("LDC2", instr);
2336988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2337088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2337188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2337288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2337388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2337488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2337588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2337688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2337788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00200000: {
2337888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfd300000
2337988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xf0000) == 0xf0000) ||
2338088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ((instr & 0xe00) == 0xa00)) {
2338188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2338288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
2338388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2338488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedT32_32("LDC2", instr);
2338588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2338688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2338788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2338888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2338988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2339088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
2339188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
2339288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
2339388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            case 0x06000000: {
2339488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              // 0xee000000
2339588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              switch (instr & 0x01000010) {
2339688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000000: {
2339788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xee000000
2339888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x10000000) {
2339988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2340088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xee000000
2340188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000e00) {
2340288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2340388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xee000a00
2340488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00b00140) {
2340588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2340688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee000a00
2340788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2340888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2340988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2341088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMLA{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; T2
2341188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmla(CurrentCond(),
2341288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2341388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2341488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rn),
2341588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
2341688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2341788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2341888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000040: {
2341988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee000a40
2342088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2342188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2342288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2342388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMLS{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; T2
2342488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmls(CurrentCond(),
2342588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2342688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2342788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rn),
2342888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
2342988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2343088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2343188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
2343288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee000b00
2343388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2343488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2343588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2343688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMLA{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; T2
2343788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmla(CurrentCond(),
2343888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
2343988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2344088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2344188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2344288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2344388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2344488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000140: {
2344588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee000b40
2344688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2344788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2344888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2344988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMLS{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; T2
2345088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmls(CurrentCond(),
2345188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
2345288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2345388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2345488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2345588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2345688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2345788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100000: {
2345888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee100a00
2345988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2346088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2346188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2346288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VNMLS{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; T1
2346388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vnmls(CurrentCond(),
2346488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
2346588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rd),
2346688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rn),
2346788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rm));
2346888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2346988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2347088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100040: {
2347188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee100a40
2347288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2347388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2347488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2347588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VNMLA{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; T1
2347688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vnmla(CurrentCond(),
2347788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
2347888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rd),
2347988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rn),
2348088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rm));
2348188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2348288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2348388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100100: {
2348488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee100b00
2348588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2348688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2348788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2348888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VNMLS{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; T1
2348988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vnmls(CurrentCond(),
2349088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F64,
2349188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
2349288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
2349388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
2349488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2349588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2349688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100140: {
2349788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee100b40
2349888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2349988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2350088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2350188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VNMLA{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; T1
2350288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vnmla(CurrentCond(),
2350388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F64,
2350488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
2350588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
2350688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
2350788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2350888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2350988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
2351088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee200a00
2351188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2351288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2351388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2351488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMUL{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; T2
2351588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmul(CurrentCond(),
2351688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2351788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2351888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rn),
2351988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
2352088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2352188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2352288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200040: {
2352388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee200a40
2352488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2352588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2352688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2352788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VNMUL{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; T1
2352888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vnmul(CurrentCond(),
2352988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
2353088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rd),
2353188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rn),
2353288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rm));
2353388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2353488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2353588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200100: {
2353688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee200b00
2353788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2353888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2353988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2354088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMUL{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; T2
2354188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmul(CurrentCond(),
2354288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
2354388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2354488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2354588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2354688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2354788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2354888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200140: {
2354988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee200b40
2355088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2355188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2355288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2355388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VNMUL{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; T1
2355488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vnmul(CurrentCond(),
2355588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F64,
2355688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
2355788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
2355888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
2355988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2356088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2356188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300000: {
2356288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee300a00
2356388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2356488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2356588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2356688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VADD{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; T2
2356788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vadd(CurrentCond(),
2356888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2356988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2357088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rn),
2357188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
2357288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2357388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2357488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300040: {
2357588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee300a40
2357688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2357788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2357888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2357988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSUB{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; T2
2358088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vsub(CurrentCond(),
2358188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2358288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2358388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rn),
2358488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
2358588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2358688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2358788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300100: {
2358888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee300b00
2358988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2359088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2359188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2359288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VADD{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; T2
2359388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vadd(CurrentCond(),
2359488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
2359588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2359688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2359788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2359888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2359988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2360088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300140: {
2360188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee300b40
2360288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2360388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2360488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2360588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSUB{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; T2
2360688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vsub(CurrentCond(),
2360788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
2360888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2360988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2361088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2361188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2361288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2361388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800000: {
2361488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee800a00
2361588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2361688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2361788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2361888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VDIV{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; T1
2361988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vdiv(CurrentCond(),
2362088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2362188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2362288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rn),
2362388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
2362488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2362588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2362688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800100: {
2362788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee800b00
2362888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2362988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2363088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2363188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VDIV{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; T1
2363288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vdiv(CurrentCond(),
2363388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
2363488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2363588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2363688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2363788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2363888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2363988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00900000: {
2364088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee900a00
2364188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2364288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2364388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2364488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFNMS{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; T1
2364588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfnms(CurrentCond(),
2364688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
2364788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rd),
2364888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rn),
2364988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rm));
2365088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2365188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2365288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00900040: {
2365388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee900a40
2365488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2365588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2365688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2365788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFNMA{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; T1
2365888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfnma(CurrentCond(),
2365988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
2366088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rd),
2366188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rn),
2366288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SRegister(rm));
2366388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2366488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2366588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00900100: {
2366688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee900b00
2366788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2366888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2366988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2367088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFNMS{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; T1
2367188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfnms(CurrentCond(),
2367288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F64,
2367388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
2367488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
2367588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
2367688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2367788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2367888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00900140: {
2367988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee900b40
2368088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2368188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2368288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2368388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFNMA{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; T1
2368488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfnma(CurrentCond(),
2368588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F64,
2368688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
2368788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
2368888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
2368988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2369088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2369188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00a00000: {
2369288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeea00a00
2369388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2369488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2369588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2369688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFMA{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; T2
2369788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfma(CurrentCond(),
2369888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2369988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2370088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rn),
2370188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
2370288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2370388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2370488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00a00040: {
2370588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeea00a40
2370688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2370788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2370888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2370988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFMS{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; T2
2371088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfms(CurrentCond(),
2371188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2371288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
2371388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rn),
2371488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
2371588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2371688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2371788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00a00100: {
2371888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeea00b00
2371988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2372088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2372188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2372288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFMA{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; T2
2372388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfma(CurrentCond(),
2372488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
2372588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2372688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2372788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2372888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2372988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2373088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00a00140: {
2373188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeea00b40
2373288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2373388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2373488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2373588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFMS{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; T2
2373688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfms(CurrentCond(),
2373788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
2373888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2373988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2374088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2374188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2374288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2374388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00b00000: {
2374488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeeb00a00
2374588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2374688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t encoded_imm =
2374788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0xf) | ((instr >> 12) & 0xf0);
2374888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              NeonImmediate imm =
2374988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ImmediateVFP::Decode<float>(encoded_imm);
2375088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMOV{<c>}{<q>}.F32 <Sd>, #<imm> ; T2
2375188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmov(CurrentCond(), F32, SRegister(rd), imm);
2375288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xffb00ff0) != 0xeeb00a00)) {
2375388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2375488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2375588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2375688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2375788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00b00040: {
2375888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeeb00a40
2375988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000e0000) {
2376088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2376188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb00a40
2376288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2376388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2376488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb00a40
2376588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2376688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2376788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2376888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2376988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VMOV{<c>}{<q>}.F32 <Sd>, <Sm> ; T2
2377088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmov(CurrentCond(),
2377188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2377288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2377388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2377488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2377588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2377688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2377788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb00ac0
2377888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2377988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2378088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2378188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2378288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VABS{<c>}{<q>}.F32 <Sd>, <Sm> ; T2
2378388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vabs(CurrentCond(),
2378488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2378588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2378688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2378788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2378888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2378988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2379088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb10a40
2379188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2379288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2379388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2379488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2379588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VNEG{<c>}{<q>}.F32 <Sd>, <Sm> ; T2
2379688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vneg(CurrentCond(),
2379788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2379888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2379988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2380088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2380188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2380288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2380388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb10ac0
2380488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2380588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2380688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2380788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2380888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VSQRT{<c>}{<q>}.F32 <Sd>, <Sm> ; T1
2380988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vsqrt(CurrentCond(),
2381088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2381188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2381288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2381388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2381488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2381588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2381688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2381788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2381888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00020000: {
2381988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb20a40
2382088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2382188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2382288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb20a40
2382388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2382488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2382588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2382688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2382788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTB{<c>}{<q>}.F32.F16 <Sd>, <Sm> ; T1
2382888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtb(CurrentCond(),
2382988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2383088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F16,
2383188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2383288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2383388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2383488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2383588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2383688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb20ac0
2383788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2383888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2383988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2384088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2384188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTT{<c>}{<q>}.F32.F16 <Sd>, <Sm> ; T1
2384288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtt(CurrentCond(),
2384388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2384488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F16,
2384588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2384688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2384788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2384888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2384988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2385088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb30a40
2385188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2385288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2385388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2385488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2385588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTB{<c>}{<q>}.F16.F32 <Sd>, <Sm> ; T1
2385688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtb(CurrentCond(),
2385788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F16,
2385888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2385988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2386088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2386188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2386288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2386388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2386488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb30ac0
2386588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2386688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2386788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2386888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2386988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTT{<c>}{<q>}.F16.F32 <Sd>, <Sm> ; T1
2387088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtt(CurrentCond(),
2387188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F16,
2387288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2387388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2387488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2387588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2387688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2387788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2387888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2387988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2388088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00040000: {
2388188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb40a40
2388288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2388388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2388488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb40a40
2388588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2388688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2388788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2388888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2388988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCMP{<c>}{<q>}.F32 <Sd>, <Sm> ; T1
2389088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcmp(CurrentCond(),
2389188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2389288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2389388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2389488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2389588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2389688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2389788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb40ac0
2389888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2389988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2390088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2390188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2390288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCMPE{<c>}{<q>}.F32 <Sd>, <Sm> ; T1
2390388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcmpe(CurrentCond(),
2390488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2390588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2390688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2390788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2390888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2390988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2391088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb50a40
2391188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2391288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2391388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCMP{<c>}{<q>}.F32 <Sd>, #0.0 ; T2
2391488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcmp(CurrentCond(),
2391588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2391688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2391788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0.0);
2391888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xffbf0fff) !=
2391988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xeeb50a40)) {
2392088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
2392188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2392288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2392388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2392488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2392588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb50ac0
2392688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2392788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2392888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCMPE{<c>}{<q>}.F32 <Sd>, #0.0 ; T2
2392988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcmpe(CurrentCond(),
2393088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2393188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2393288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            0.0);
2393388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xffbf0fff) !=
2393488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xeeb50ac0)) {
2393588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
2393688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2393788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2393888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2393988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2394088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2394188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2394288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00060000: {
2394388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb60a40
2394488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2394588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2394688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb60a40
2394788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2394888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2394988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2395088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
23951d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VRINTR{<c>}{<q>}.F32.F32 <Sd>, <Sm> ; T1 NOLINT(whitespace/line_length)
2395288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vrintr(CurrentCond(),
2395388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F32,
2395488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F32,
2395588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             SRegister(rd),
2395688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             SRegister(rm));
2395788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2395888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2395988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2396088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb60ac0
2396188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2396288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2396388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2396488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
23965d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VRINTZ{<c>}{<q>}.F32.F32 <Sd>, <Sm> ; T1 NOLINT(whitespace/line_length)
2396688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vrintz(CurrentCond(),
2396788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F32,
2396888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F32,
2396988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             SRegister(rd),
2397088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             SRegister(rm));
2397188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2397288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2397388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2397488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb70a40
2397588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2397688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2397788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2397888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
23979d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VRINTX{<c>}{<q>}.F32.F32 <Sd>, <Sm> ; T1 NOLINT(whitespace/line_length)
2398088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vrintx(CurrentCond(),
2398188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F32,
2398288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F32,
2398388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             SRegister(rd),
2398488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             SRegister(rm));
2398588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2398688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2398788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2398888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb70ac0
2398988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2399088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2399188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2399288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2399388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVT{<c>}{<q>}.F64.F32 <Dd>, <Sm> ; T1
2399488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvt(CurrentCond(),
2399588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2399688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2399788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2399888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2399988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2400088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2400188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2400288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2400388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2400488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00080000: {
2400588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb80a40
2400688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00010000) == 0x00000000) {
2400788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
2400888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_2_Decode((instr >> 7) & 0x1);
2400988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
2401088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2401188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2401288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2401388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2401488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractSRegister(instr, 22, 12);
2401588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractSRegister(instr, 5, 0);
2401688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVT{<c>}{<q>}.F32.<dt> <Sd>, <Sm> ; T1
2401788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvt(CurrentCond(),
2401888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
2401988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
2402088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         SRegister(rd),
2402188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         SRegister(rm));
2402288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2402388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2402488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2402588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2402688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2402788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000a0000: {
2402888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeba0a40
2402988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2403088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_sx_1_Decode(((instr >> 7) & 0x1) |
2403188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 15) & 0x2));
2403288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2403388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2403488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2403588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2403688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2403788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned offset = 32;
2403888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(S16) || dt.Is(U16)) {
2403988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    offset = 16;
2404088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2404188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t fbits =
2404288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      offset - (((instr >> 5) & 0x1) |
2404388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr << 1) & 0x1e));
24044d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VCVT{<c>}{<q>}.F32.<dt> <Sdm>, <Sdm>, #<fbits> ; T1 NOLINT(whitespace/line_length)
2404588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvt(CurrentCond(),
2404688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
2404788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
2404888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
2404988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
2405088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       fbits);
2405188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2405288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2405388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000c0000: {
2405488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeebc0a40
2405588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2405688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2405788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeebc0a40
2405888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2405988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2406088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2406188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2406288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTR{<c>}{<q>}.U32.F32 <Sd>, <Sm> ; T1
2406388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtr(CurrentCond(),
2406488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            U32,
2406588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2406688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2406788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2406888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2406988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2407088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2407188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeebc0ac0
2407288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2407388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2407488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2407588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2407688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVT{<c>}{<q>}.U32.F32 <Sd>, <Sm> ; T1
2407788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvt(CurrentCond(),
2407888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           U32,
2407988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2408088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2408188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2408288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2408388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2408488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2408588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeebd0a40
2408688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2408788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2408888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2408988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2409088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTR{<c>}{<q>}.S32.F32 <Sd>, <Sm> ; T1
2409188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtr(CurrentCond(),
2409288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            S32,
2409388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F32,
2409488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2409588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2409688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2409788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2409888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2409988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeebd0ac0
2410088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2410188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2410288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2410388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2410488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVT{<c>}{<q>}.S32.F32 <Sd>, <Sm> ; T1
2410588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvt(CurrentCond(),
2410688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           S32,
2410788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2410888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2410988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2411088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2411188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2411288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2411388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2411488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2411588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000e0000: {
2411688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeebe0a40
2411788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2411888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_sx_1_Decode(((instr >> 7) & 0x1) |
2411988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 15) & 0x2));
2412088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2412188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2412288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2412388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2412488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2412588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned offset = 32;
2412688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(S16) || dt.Is(U16)) {
2412788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    offset = 16;
2412888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2412988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t fbits =
2413088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      offset - (((instr >> 5) & 0x1) |
2413188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr << 1) & 0x1e));
24132d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VCVT{<c>}{<q>}.<dt>.F32 <Sdm>, <Sdm>, #<fbits> ; T1 NOLINT(whitespace/line_length)
2413388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvt(CurrentCond(),
2413488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
2413588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
2413688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
2413788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
2413888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       fbits);
2413988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2414088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2414188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2414288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2414388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2414488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00b00100: {
2414588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeeb00b00
2414688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2414788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t encoded_imm =
2414888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0xf) | ((instr >> 12) & 0xf0);
2414988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              NeonImmediate imm =
2415088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ImmediateVFP::Decode<double>(encoded_imm);
2415188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMOV{<c>}{<q>}.F64 <Dd>, #<imm> ; T2
2415288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmov(CurrentCond(), F64, DRegister(rd), imm);
2415388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xffb00ff0) != 0xeeb00b00)) {
2415488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2415588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2415688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2415788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2415888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00b00140: {
2415988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xeeb00b40
2416088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000e0000) {
2416188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2416288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb00b40
2416388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2416488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2416588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb00b40
2416688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2416788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2416888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2416988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2417088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VMOV{<c>}{<q>}.F64 <Dd>, <Dm> ; T2
2417188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmov(CurrentCond(),
2417288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2417388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2417488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2417588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2417688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2417788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2417888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb00bc0
2417988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2418088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2418188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2418288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2418388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VABS{<c>}{<q>}.F64 <Dd>, <Dm> ; T2
2418488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vabs(CurrentCond(),
2418588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2418688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2418788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2418888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2418988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2419088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2419188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb10b40
2419288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2419388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2419488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2419588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2419688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VNEG{<c>}{<q>}.F64 <Dd>, <Dm> ; T2
2419788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vneg(CurrentCond(),
2419888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2419988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2420088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2420188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2420288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2420388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2420488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb10bc0
2420588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2420688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2420788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2420888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2420988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VSQRT{<c>}{<q>}.F64 <Dd>, <Dm> ; T1
2421088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vsqrt(CurrentCond(),
2421188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2421288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
2421388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2421488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2421588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2421688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2421788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2421888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2421988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00020000: {
2422088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb20b40
2422188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2422288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2422388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb20b40
2422488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2422588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2422688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2422788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2422888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTB{<c>}{<q>}.F64.F16 <Dd>, <Sm> ; T1
2422988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtb(CurrentCond(),
2423088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2423188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F16,
2423288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
2423388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2423488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2423588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2423688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2423788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb20bc0
2423888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2423988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2424088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2424188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 5, 0);
2424288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTT{<c>}{<q>}.F64.F16 <Dd>, <Sm> ; T1
2424388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtt(CurrentCond(),
2424488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2424588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F16,
2424688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
2424788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rm));
2424888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2424988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2425088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2425188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb30b40
2425288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2425388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2425488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2425588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2425688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTB{<c>}{<q>}.F16.F64 <Sd>, <Dm> ; T1
2425788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtb(CurrentCond(),
2425888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F16,
2425988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2426088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2426188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2426288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2426388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2426488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2426588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb30bc0
2426688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2426788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2426888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2426988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2427088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTT{<c>}{<q>}.F16.F64 <Sd>, <Dm> ; T1
2427188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtt(CurrentCond(),
2427288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F16,
2427388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2427488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2427588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2427688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2427788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2427888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2427988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2428088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2428188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00040000: {
2428288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb40b40
2428388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2428488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2428588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb40b40
2428688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2428788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2428888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2428988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2429088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCMP{<c>}{<q>}.F64 <Dd>, <Dm> ; T1
2429188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcmp(CurrentCond(),
2429288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2429388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2429488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2429588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2429688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2429788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2429888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb40bc0
2429988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2430088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2430188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2430288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2430388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCMPE{<c>}{<q>}.F64 <Dd>, <Dm> ; T1
2430488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcmpe(CurrentCond(),
2430588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2430688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
2430788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2430888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2430988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2431088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2431188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb50b40
2431288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2431388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2431488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCMP{<c>}{<q>}.F64 <Dd>, #0.0 ; T2
2431588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcmp(CurrentCond(),
2431688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2431788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2431888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0.0);
2431988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xffbf0fff) !=
2432088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xeeb50b40)) {
2432188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
2432288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2432388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2432488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2432588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2432688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb50bc0
2432788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2432888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2432988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCMPE{<c>}{<q>}.F64 <Dd>, #0.0 ; T2
2433088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcmpe(CurrentCond(),
2433188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2433288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
2433388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            0.0);
2433488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xffbf0fff) !=
2433588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xeeb50bc0)) {
2433688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
2433788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2433888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2433988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2434088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2434188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2434288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2434388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00060000: {
2434488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb60b40
2434588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2434688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2434788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb60b40
2434888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2434988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2435088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2435188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
24352d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VRINTR{<c>}{<q>}.F64.F64 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2435388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vrintr(CurrentCond(),
2435488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F64,
2435588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F64,
2435688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
2435788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rm));
2435888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2435988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2436088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2436188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb60bc0
2436288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2436388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2436488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2436588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
24366d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VRINTZ{<c>}{<q>}.F64.F64 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2436788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vrintz(CurrentCond(),
2436888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F64,
2436988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F64,
2437088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
2437188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rm));
2437288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2437388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2437488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2437588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb70b40
2437688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2437788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2437888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2437988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
24380d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VRINTX{<c>}{<q>}.F64.F64 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2438188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vrintx(CurrentCond(),
2438288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F64,
2438388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             F64,
2438488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
2438588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rm));
2438688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2438788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2438888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2438988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeeb70bc0
2439088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2439188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2439288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2439388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2439488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVT{<c>}{<q>}.F32.F64 <Sd>, <Dm> ; T1
2439588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvt(CurrentCond(),
2439688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2439788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2439888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2439988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2440088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2440188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2440288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2440388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2440488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2440588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00080000: {
2440688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeb80b40
2440788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00010000) == 0x00000000) {
2440888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
2440988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_2_Decode((instr >> 7) & 0x1);
2441088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
2441188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2441288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2441388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2441488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2441588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
2441688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractSRegister(instr, 5, 0);
2441788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVT{<c>}{<q>}.F64.<dt> <Dd>, <Sm> ; T1
2441888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvt(CurrentCond(),
2441988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F64,
2442088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
2442188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
2442288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         SRegister(rm));
2442388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2442488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2442588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2442688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2442788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2442888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000a0000: {
2442988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeeba0b40
2443088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2443188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_sx_1_Decode(((instr >> 7) & 0x1) |
2443288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 15) & 0x2));
2443388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2443488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2443588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2443688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2443788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
2443888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned offset = 32;
2443988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(S16) || dt.Is(U16)) {
2444088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    offset = 16;
2444188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2444288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t fbits =
2444388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      offset - (((instr >> 5) & 0x1) |
2444488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr << 1) & 0x1e));
24445d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VCVT{<c>}{<q>}.F64.<dt> <Ddm>, <Ddm>, #<fbits> ; T1 NOLINT(whitespace/line_length)
2444688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvt(CurrentCond(),
2444788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F64,
2444888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
2444988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2445088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2445188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       fbits);
2445288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2445388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2445488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000c0000: {
2445588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeebc0b40
2445688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00010080) {
2445788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2445888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeebc0b40
2445988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2446088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2446188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2446288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2446388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTR{<c>}{<q>}.U32.F64 <Sd>, <Dm> ; T1
2446488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtr(CurrentCond(),
2446588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            U32,
2446688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2446788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2446888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2446988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2447088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2447188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000080: {
2447288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeebc0bc0
2447388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2447488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2447588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2447688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2447788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVT{<c>}{<q>}.U32.F64 <Sd>, <Dm> ; T1
2447888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvt(CurrentCond(),
2447988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           U32,
2448088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2448188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2448288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2448388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2448488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2448588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2448688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeebd0b40
2448788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2448888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2448988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2449088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2449188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVTR{<c>}{<q>}.S32.F64 <Sd>, <Dm> ; T1
2449288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvtr(CurrentCond(),
2449388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            S32,
2449488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            F64,
2449588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            SRegister(rd),
2449688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2449788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2449888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2449988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010080: {
2450088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xeebd0bc0
2450188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2450288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractSRegister(instr, 22, 12);
2450388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2450488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
2450588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VCVT{<c>}{<q>}.S32.F64 <Sd>, <Dm> ; T1
2450688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vcvt(CurrentCond(),
2450788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           S32,
2450888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2450988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2451088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2451188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2451288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2451388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2451488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2451588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2451688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000e0000: {
2451788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeebe0b40
2451888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2451988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_sx_1_Decode(((instr >> 7) & 0x1) |
2452088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 15) & 0x2));
2452188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2452288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2452388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2452488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2452588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
2452688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned offset = 32;
2452788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(S16) || dt.Is(U16)) {
2452888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    offset = 16;
2452988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2453088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t fbits =
2453188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      offset - (((instr >> 5) & 0x1) |
2453288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr << 1) & 0x1e));
24533d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VCVT{<c>}{<q>}.<dt>.F64 <Ddm>, <Ddm>, #<fbits> ; T1 NOLINT(whitespace/line_length)
2453488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvt(CurrentCond(),
2453588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
2453688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F64,
2453788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2453888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2453988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       fbits);
2454088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2454188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2454288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2454388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2454488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
245454339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2454688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2454788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2454888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2454988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2455088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2455188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2455288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xe00) == 0xa00)) {
2455388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2455488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2455588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2455688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("CDP", instr);
2455788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2455888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2455988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2456088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2456188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2456288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x10000000: {
2456388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfe000000
2456488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000e00) {
2456588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2456688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xfe000a00
2456788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00b00140) {
2456888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2456988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe000a00
2457088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2457188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2457288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2457388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSELEQ.F32 <Sd>, <Sn>, <Sm> ; T1
2457488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vseleq(F32,
2457588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
2457688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rn),
2457788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
2457888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2457988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2458088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
2458188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe000b00
2458288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2458388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2458488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2458588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSELEQ.F64 <Dd>, <Dn>, <Dm> ; T1
2458688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vseleq(F64,
2458788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2458888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
2458988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2459088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2459188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2459288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100000: {
2459388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe100a00
2459488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2459588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2459688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2459788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSELVS.F32 <Sd>, <Sn>, <Sm> ; T1
2459888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vselvs(F32,
2459988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
2460088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rn),
2460188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
2460288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2460388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2460488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100100: {
2460588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe100b00
2460688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2460788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2460888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2460988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSELVS.F64 <Dd>, <Dn>, <Dm> ; T1
2461088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vselvs(F64,
2461188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2461288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
2461388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2461488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2461588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2461688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
2461788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe200a00
2461888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2461988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2462088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2462188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSELGE.F32 <Sd>, <Sn>, <Sm> ; T1
2462288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vselge(F32,
2462388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
2462488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rn),
2462588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
2462688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2462788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2462888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200100: {
2462988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe200b00
2463088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2463188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2463288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2463388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSELGE.F64 <Dd>, <Dn>, <Dm> ; T1
2463488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vselge(F64,
2463588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2463688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
2463788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2463888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2463988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2464088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300000: {
2464188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe300a00
2464288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2464388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2464488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2464588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSELGT.F32 <Sd>, <Sn>, <Sm> ; T1
2464688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vselgt(F32,
2464788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
2464888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rn),
2464988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
2465088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2465188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2465288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300100: {
2465388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe300b00
2465488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2465588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2465688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2465788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSELGT.F64 <Dd>, <Dn>, <Dm> ; T1
2465888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vselgt(F64,
2465988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2466088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
2466188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2466288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2466388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2466488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800000: {
2466588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe800a00
2466688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2466788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2466888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2466988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMAXNM{<q>}.F32 <Sd>, <Sn>, <Sm> ; T2
2467088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmaxnm(F32,
2467188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
2467288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rn),
2467388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
2467488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2467588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2467688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800040: {
2467788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe800a40
2467888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
2467988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
2468088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
2468188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMINNM{<q>}.F32 <Sd>, <Sn>, <Sm> ; T2
2468288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vminnm(F32,
2468388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
2468488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rn),
2468588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
2468688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2468788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2468888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800100: {
2468988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe800b00
2469088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2469188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2469288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2469388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMAXNM{<q>}.F64 <Dd>, <Dn>, <Dm> ; T2
2469488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmaxnm(F64,
2469588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2469688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
2469788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2469888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2469988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2470088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800140: {
2470188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfe800b40
2470288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2470388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2470488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2470588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMINNM{<q>}.F64 <Dd>, <Dn>, <Dm> ; T2
2470688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vminnm(F64,
2470788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2470888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
2470988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2471088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2471188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2471288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00b00040: {
2471388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfeb00a40
2471488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000f0000) {
2471588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00080000: {
2471688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfeb80a40
2471788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000080) == 0x00000000) {
2471888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2471988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractSRegister(instr, 22, 12);
2472088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractSRegister(instr, 5, 0);
2472188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTA{<q>}.F32.F32 <Sd>, <Sm> ; T1
2472288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrinta(F32,
2472388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2472488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2472588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2472688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2472788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2472888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2472988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2473088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2473188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00090000: {
2473288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfeb90a40
2473388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000080) == 0x00000000) {
2473488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2473588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractSRegister(instr, 22, 12);
2473688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractSRegister(instr, 5, 0);
2473788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTN{<q>}.F32.F32 <Sd>, <Sm> ; T1
2473888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintn(F32,
2473988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2474088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2474188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2474288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2474388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2474488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2474588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2474688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2474788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000a0000: {
2474888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfeba0a40
2474988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000080) == 0x00000000) {
2475088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2475188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractSRegister(instr, 22, 12);
2475288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractSRegister(instr, 5, 0);
2475388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTP{<q>}.F32.F32 <Sd>, <Sm> ; T1
2475488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintp(F32,
2475588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2475688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2475788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2475888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2475988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2476088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2476188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2476288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2476388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000b0000: {
2476488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebb0a40
2476588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000080) == 0x00000000) {
2476688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2476788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractSRegister(instr, 22, 12);
2476888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractSRegister(instr, 5, 0);
2476988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTM{<q>}.F32.F32 <Sd>, <Sm> ; T1
2477088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintm(F32,
2477188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
2477288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rd),
2477388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SRegister(rm));
2477488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2477588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2477688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2477788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2477888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2477988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000c0000: {
2478088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebc0a40
2478188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2478288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_op_2_Decode((instr >> 7) & 0x1);
2478388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2478488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2478588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2478688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2478788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2478888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractSRegister(instr, 5, 0);
2478988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVTA{<q>}.<dt>.F32 <Sd>, <Sm> ; T1
2479088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvta(dt, F32, SRegister(rd), SRegister(rm));
2479188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2479288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2479388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000d0000: {
2479488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebd0a40
2479588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2479688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_op_2_Decode((instr >> 7) & 0x1);
2479788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2479888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2479988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2480088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2480188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2480288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractSRegister(instr, 5, 0);
2480388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVTN{<q>}.<dt>.F32 <Sd>, <Sm> ; T1
2480488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvtn(dt, F32, SRegister(rd), SRegister(rm));
2480588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2480688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2480788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000e0000: {
2480888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebe0a40
2480988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2481088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_op_2_Decode((instr >> 7) & 0x1);
2481188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2481288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2481388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2481488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2481588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2481688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractSRegister(instr, 5, 0);
2481788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVTP{<q>}.<dt>.F32 <Sd>, <Sm> ; T1
2481888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvtp(dt, F32, SRegister(rd), SRegister(rm));
2481988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2482088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2482188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000f0000: {
2482288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebf0a40
2482388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2482488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_op_2_Decode((instr >> 7) & 0x1);
2482588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2482688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2482788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2482888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2482988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2483088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractSRegister(instr, 5, 0);
2483188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVTM{<q>}.<dt>.F32 <Sd>, <Sm> ; T1
2483288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvtm(dt, F32, SRegister(rd), SRegister(rm));
2483388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2483488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
248354339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
2483688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2483788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2483888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2483988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2484088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2484188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00b00140: {
2484288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xfeb00b40
2484388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x000f0000) {
2484488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00080000: {
2484588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfeb80b40
2484688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000080) == 0x00000000) {
2484788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2484888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
2484988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
2485088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTA{<q>}.F64.F64 <Dd>, <Dm> ; T1
2485188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrinta(F64,
2485288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2485388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2485488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2485588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2485688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2485788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2485888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2485988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2486088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00090000: {
2486188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfeb90b40
2486288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000080) == 0x00000000) {
2486388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2486488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
2486588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
2486688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTN{<q>}.F64.F64 <Dd>, <Dm> ; T1
2486788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintn(F64,
2486888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2486988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2487088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2487188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2487288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2487388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2487488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2487588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2487688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000a0000: {
2487788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfeba0b40
2487888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000080) == 0x00000000) {
2487988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2488088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
2488188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
2488288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTP{<q>}.F64.F64 <Dd>, <Dm> ; T1
2488388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintp(F64,
2488488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2488588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2488688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2488788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2488888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2488988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2489088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2489188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2489288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000b0000: {
2489388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebb0b40
2489488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000080) == 0x00000000) {
2489588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2489688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
2489788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
2489888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTM{<q>}.F64.F64 <Dd>, <Dm> ; T1
2489988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintm(F64,
2490088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F64,
2490188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2490288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2490388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2490488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2490588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2490688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2490788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2490888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000c0000: {
2490988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebc0b40
2491088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2491188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_op_2_Decode((instr >> 7) & 0x1);
2491288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2491388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2491488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2491588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2491688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2491788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2491888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVTA{<q>}.<dt>.F64 <Sd>, <Dm> ; T1
2491988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvta(dt, F64, SRegister(rd), DRegister(rm));
2492088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2492188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2492288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000d0000: {
2492388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebd0b40
2492488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2492588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_op_2_Decode((instr >> 7) & 0x1);
2492688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2492788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2492888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2492988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2493088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2493188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2493288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVTN{<q>}.<dt>.F64 <Sd>, <Dm> ; T1
2493388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvtn(dt, F64, SRegister(rd), DRegister(rm));
2493488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2493588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2493688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000e0000: {
2493788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebe0b40
2493888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2493988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_op_2_Decode((instr >> 7) & 0x1);
2494088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2494188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2494288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2494388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2494488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2494588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2494688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVTP{<q>}.<dt>.F64 <Sd>, <Dm> ; T1
2494788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvtp(dt, F64, SRegister(rd), DRegister(rm));
2494888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2494988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2495088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x000f0000: {
2495188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xfebf0b40
2495288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2495388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_op_2_Decode((instr >> 7) & 0x1);
2495488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2495588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2495688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2495788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2495888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractSRegister(instr, 22, 12);
2495988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2496088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVTM{<q>}.<dt>.F64 <Sd>, <Dm> ; T1
2496188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvtm(dt, F64, SRegister(rd), DRegister(rm));
2496288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2496388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
249644339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
2496588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2496688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2496788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2496888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2496988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
249704339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2497188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2497288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2497388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2497488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2497588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2497688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2497788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xe00) == 0xa00)) {
2497888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2497988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2498088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2498188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("CDP2", instr);
2498288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2498388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2498488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2498588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2498688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2498788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2498888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2498988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2499088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x00000010: {
2499188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xee000010
2499288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x10100000) {
2499388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2499488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xee000010
2499588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000e00) {
2499688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2499788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xee000a10
2499888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00800100) {
2499988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2500088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee000a10
2500188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00600000) == 0x00000000) {
2500288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = ExtractSRegister(instr, 7, 16);
2500388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rt = (instr >> 12) & 0xf;
2500488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VMOV{<c>}{<q>} <Sn>, <Rt> ; T1
2500588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vmov(CurrentCond(),
2500688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rn),
2500788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rt));
2500888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfff00f7f) != 0xee000a10)) {
2500988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableT32(instr);
2501088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2501188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2501288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2501388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2501488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2501588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2501688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
2501788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee000b10
2501888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned lane;
2501988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2502088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_opc1_opc2_1_Decode(((instr >> 5) & 0x3) |
2502188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            ((instr >> 19) &
2502288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             0xc),
2502388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        &lane);
2502488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2502588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2502688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2502788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2502888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 7, 16);
2502988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
2503088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMOV{<c>}{<q>}{.<size>} <Dd[x]>, <Rt> ; T1
2503188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmov(CurrentCond(),
2503288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2503388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegisterLane(rd, lane),
2503488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt));
2503588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xff900f1f) != 0xee000b10)) {
2503688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2503788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2503888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2503988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2504088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800000: {
2504188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee800a10
2504288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00600000) == 0x00600000) {
2504388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned spec_reg = (instr >> 16) & 0xf;
2504488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rt = (instr >> 12) & 0xf;
2504588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (spec_reg) {
2504688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
2504788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
2504888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x8: {
2504988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMSR{<c>}{<q>} <spec_reg>, <Rt> ; T1
2505088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmsr(CurrentCond(),
2505188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         SpecialFPRegister(spec_reg),
2505288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         Register(rt));
2505388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xfff00fff) != 0xeee00a10)) {
2505488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnpredictableT32(instr);
2505588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2505688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
2505788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2505888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
2505988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2506088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
2506188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2506288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2506388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2506488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2506588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2506688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2506788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00800100: {
2506888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee800b10
2506988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00200040) {
2507088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2507188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xee800b10
2507288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2507388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_B_E_1_Decode(((instr >> 5) & 0x1) |
2507488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x2));
2507588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2507688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2507788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2507888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2507988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 7, 16);
2508088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
2508188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VDUP{<c>}{<q>}.<dt> <Dd>, <Rt> ; T1
2508288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vdup(CurrentCond(),
2508388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
2508488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2508588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt));
2508688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffb00f5f) != 0xee800b10)) {
2508788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2508888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2508988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2509088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2509188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00200000: {
2509288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeea00b10
2509388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2509488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_B_E_1_Decode(((instr >> 5) & 0x1) |
2509588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x2));
2509688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2509788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2509888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2509988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2510088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 16) & 1) != 0) {
2510188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2510288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2510388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2510488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 7, 16);
2510588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
2510688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VDUP{<c>}{<q>}.<dt> <Qd>, <Rt> ; T1
2510788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vdup(CurrentCond(),
2510888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
2510988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
2511088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt));
2511188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xffb00f5f) != 0xeea00b10)) {
2511288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2511388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2511488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2511588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
251164339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
2511788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2511888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2511988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2512088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2512188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2512288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2512388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2512488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2512588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2512688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xe00) == 0xa00)) {
2512788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2512888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2512988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2513088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("MCR", instr);
2513188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2513288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2513388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2513488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2513588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2513688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00100000: {
2513788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xee100010
2513888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000e00) {
2513988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2514088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xee100a10
2514188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000100) {
2514288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2514388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee100a10
2514488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00e00000) {
2514588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2514688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xee100a10
2514788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
2514888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractSRegister(instr, 7, 16);
2514988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VMOV{<c>}{<q>} <Rt>, <Sn> ; T1
2515088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vmov(CurrentCond(),
2515188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt),
2515288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rn));
2515388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xfff00f7f) != 0xee100a10)) {
2515488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableT32(instr);
2515588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2515688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2515788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2515888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00e00000: {
2515988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xeef00a10
2516088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rt = (instr >> 12) & 0xf;
2516188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned spec_reg = (instr >> 16) & 0xf;
2516288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (spec_reg) {
2516388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x0:
2516488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x1:
2516588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x5:
2516688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x6:
2516788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x7:
2516888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x8: {
2516988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // VMRS{<c>}{<q>} <Rt>, <spec_reg> ; T1
2517088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmrs(CurrentCond(),
2517188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           RegisterOrAPSR_nzcv(rt),
2517288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           SpecialFPRegister(spec_reg));
2517388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0xfff00fff) !=
2517488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           0xeef00a10)) {
2517588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnpredictableT32(instr);
2517688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2517788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2517888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2517988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default:
2518088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2518188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2518288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2518388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2518488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
251854339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
2518688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2518788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2518888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2518988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2519088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2519188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000100: {
2519288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xee100b10
2519388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned lane;
2519488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2519588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_U_opc1_opc2_1_Decode(((instr >> 5) & 0x3) |
2519688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 19) &
2519788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0xc) |
2519888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 19) &
2519988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x10),
2520088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          &lane);
2520188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2520288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2520388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2520488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2520588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
2520688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2520788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMOV{<c>}{<q>}{.<dt>} <Rt>, <Dn[x]> ; T1
2520888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmov(CurrentCond(),
2520988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2521088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
2521188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegisterLane(rn, lane));
2521288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xff100f1f) != 0xee100b10)) {
2521388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableT32(instr);
2521488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2521588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2521688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2521788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2521888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2521988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2522088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2522188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xe00) == 0xa00)) {
2522288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2522388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2522488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2522588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedT32_32("MRC", instr);
2522688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2522788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2522888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2522988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2523088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2523188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x10000000: {
2523288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfe000010
2523388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xe00) == 0xa00)) {
2523488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2523588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
2523688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2523788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedT32_32("MCR2", instr);
2523888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2523988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2524088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x10100000: {
2524188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xfe100010
2524288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xe00) == 0xa00)) {
2524388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedT32(instr);
2524488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
2524588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2524688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedT32_32("MRC2", instr);
2524788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2524888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2524988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2525088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2525188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2525288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01000000: {
2525388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xef000000
2525488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00800000) {
2525588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2525688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xef000000
2525788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f40) {
2525888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2525988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000000
2526088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2526188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2526288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2526388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2526488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2526588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2526688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2526788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2526888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2526988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VHADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2527088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vhadd(CurrentCond(),
2527188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
2527288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
2527388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn),
2527488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rm));
2527588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2527688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2527788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000040: {
2527888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000040
2527988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2528088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2528188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2528288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2528388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2528488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2528588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
2528688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2528788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2528888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2528988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
2529088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
2529188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2529288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2529388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2529488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
2529588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
2529688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2529788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2529888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2529988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
2530088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VHADD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2530188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vhadd(CurrentCond(),
2530288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
2530388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rd),
2530488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rn),
2530588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rm));
2530688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2530788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2530888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000100: {
2530988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000100
2531088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2531188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2531288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2531388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2531488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2531588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2531688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2531788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2531888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2531988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRHADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2532088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrhadd(CurrentCond(),
2532188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
2532288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
2532388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rn),
2532488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rm));
2532588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2532688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2532788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000140: {
2532888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000140
2532988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2533088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2533188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2533288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2533388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2533488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2533588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
2533688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2533788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2533888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2533988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
2534088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
2534188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2534288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2534388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2534488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
2534588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
2534688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2534788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2534888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2534988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
2535088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRHADD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2535188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrhadd(CurrentCond(),
2535288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
2535388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rd),
2535488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rn),
2535588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rm));
2535688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2535788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2535888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000200: {
2535988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000200
2536088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2536188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2536288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2536388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2536488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2536588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2536688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2536788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2536888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2536988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VHSUB{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2537088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vhsub(CurrentCond(),
2537188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
2537288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
2537388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn),
2537488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rm));
2537588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2537688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2537788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000240: {
2537888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000240
2537988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2538088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2538188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2538288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2538388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2538488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2538588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
2538688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2538788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2538888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2538988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
2539088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
2539188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2539288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2539388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2539488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
2539588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
2539688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2539788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2539888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2539988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
2540088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VHSUB{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2540188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vhsub(CurrentCond(),
2540288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
2540388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rd),
2540488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rn),
2540588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rm));
2540688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2540788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2540888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000300: {
2540988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000300
2541088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2541188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2541288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2541388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2541488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2541588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2541688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2541788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2541888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2541988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VCGT{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2542088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vcgt(CurrentCond(),
2542188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
2542288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rd),
2542388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rn),
2542488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rm));
2542588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2542688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2542788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000340: {
2542888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000340
2542988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2543088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2543188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2543288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2543388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2543488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2543588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
2543688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2543788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2543888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2543988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
2544088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
2544188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2544288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2544388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2544488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
2544588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
2544688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2544788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2544888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2544988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
2545088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VCGT{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2545188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vcgt(CurrentCond(),
2545288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
2545388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rd),
2545488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rn),
2545588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rm));
2545688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2545788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2545888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000400: {
2545988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000400
2546088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
2546188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2546288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2546388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2546488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2546588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2546688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2546788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2546888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2546988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VSHL{<c>}{<q>}.<dt> {<Dd>}, <Dm>, <Dn> ; T1
2547088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vshl(CurrentCond(),
2547188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
2547288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rd),
2547388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rm),
2547488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rn));
2547588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2547688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2547788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000440: {
2547888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000440
2547988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
2548088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2548188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2548288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2548388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2548488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2548588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
2548688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2548788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2548888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2548988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
2549088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
2549188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2549288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2549388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2549488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
2549588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
2549688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2549788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2549888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2549988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
2550088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VSHL{<c>}{<q>}.<dt> {<Qd>}, <Qm>, <Qn> ; T1
2550188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vshl(CurrentCond(),
2550288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
2550388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rd),
2550488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rm),
2550588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rn));
2550688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2550788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2550888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000500: {
2550988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000500
2551088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
2551188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2551288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2551388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2551488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2551588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2551688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2551788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2551888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2551988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRSHL{<c>}{<q>}.<dt> {<Dd>}, <Dm>, <Dn> ; T1
2552088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrshl(CurrentCond(),
2552188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
2552288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
2552388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rm),
2552488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn));
2552588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2552688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2552788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000540: {
2552888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000540
2552988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
2553088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2553188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2553288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2553388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2553488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2553588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
2553688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2553788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2553888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2553988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
2554088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
2554188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2554288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2554388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2554488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
2554588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
2554688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2554788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2554888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2554988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
2555088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRSHL{<c>}{<q>}.<dt> {<Qd>}, <Qm>, <Qn> ; T1
2555188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrshl(CurrentCond(),
2555288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
2555388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rd),
2555488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rm),
2555588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rn));
2555688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2555788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2555888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000600: {
2555988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000600
2556088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2556188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2556288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2556388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2556488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2556588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2556688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2556788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2556888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2556988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VMAX{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2557088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vmax(CurrentCond(),
2557188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
2557288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rd),
2557388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rn),
2557488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rm));
2557588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2557688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2557788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000640: {
2557888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000640
2557988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2558088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2558188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2558288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2558388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2558488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2558588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
2558688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2558788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2558888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2558988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
2559088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
2559188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2559288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2559388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2559488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
2559588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
2559688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2559788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2559888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2559988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
2560088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VMAX{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2560188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vmax(CurrentCond(),
2560288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
2560388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rd),
2560488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rn),
2560588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rm));
2560688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2560788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2560888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000700: {
2560988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000700
2561088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2561188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2561288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2561388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2561488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2561588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2561688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2561788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2561888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2561988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VABD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2562088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vabd(CurrentCond(),
2562188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
2562288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rd),
2562388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rn),
2562488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rm));
2562588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2562688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2562788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000740: {
2562888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000740
2562988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2563088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2563188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2563288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2563388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2563488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2563588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
2563688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2563788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2563888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2563988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
2564088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
2564188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2564288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2564388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2564488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
2564588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
2564688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2564788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2564888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2564988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
2565088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VABD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2565188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vabd(CurrentCond(),
2565288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
2565388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rd),
2565488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rn),
2565588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rm));
2565688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2565788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2565888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000800: {
2565988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000800
2566088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
2566188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2566288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000800
2566388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2566488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_2_Decode((instr >> 20) & 0x3);
2566588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2566688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2566788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2566888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2566988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2567088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2567188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2567288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2567388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vadd(CurrentCond(),
2567488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2567588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2567688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2567788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2567888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2567988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2568088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2568188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000800
2568288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2568388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_2_Decode((instr >> 20) & 0x3);
2568488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2568588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2568688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2568788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2568888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2568988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2569088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2569188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSUB{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2569288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vsub(CurrentCond(),
2569388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2569488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2569588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2569688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2569788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2569888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2569988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2570088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2570188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2570288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000840: {
2570388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000840
2570488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
2570588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2570688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000840
2570788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2570888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_2_Decode((instr >> 20) & 0x3);
2570988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2571088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2571188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2571288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2571388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2571488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2571588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2571688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2571788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2571888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2571988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2572088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2572188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2572288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2572388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2572488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2572588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2572688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2572788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2572888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VADD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2572988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vadd(CurrentCond(),
2573088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2573188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2573288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2573388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2573488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2573588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2573688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2573788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000840
2573888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2573988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_2_Decode((instr >> 20) & 0x3);
2574088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2574188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2574288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2574388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2574488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2574588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2574688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2574788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2574888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2574988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2575088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2575188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2575288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2575388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2575488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2575588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2575688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2575788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2575888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2575988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSUB{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2576088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vsub(CurrentCond(),
2576188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2576288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2576388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2576488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2576588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2576688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2576788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2576888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2576988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2577088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000900: {
2577188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000900
2577288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
2577388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2577488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000900
2577588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2577688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_10_Decode((instr >> 20) & 0x3);
2577788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2577888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2577988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2578088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2578188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2578288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2578388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
25784d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VMLA{<c>}{<q>}.<type><size> <Dd>, <Dn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2578588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmla(CurrentCond(),
2578688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2578788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2578888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2578988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2579088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2579188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2579288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2579388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000900
2579488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2579588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_10_Decode((instr >> 20) & 0x3);
2579688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2579788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2579888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2579988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2580088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2580188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2580288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
25803d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VMLS{<c>}{<q>}.<type><size> <Dd>, <Dn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2580488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmls(CurrentCond(),
2580588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2580688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2580788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2580888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2580988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2581088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2581188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2581288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2581388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2581488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000940: {
2581588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000940
2581688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
2581788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2581888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000940
2581988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2582088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_10_Decode((instr >> 20) & 0x3);
2582188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2582288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2582388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2582488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2582588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2582688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2582788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2582888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2582988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2583088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2583188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2583288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2583388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2583488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2583588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2583688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2583788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2583888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2583988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
25840d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VMLA{<c>}{<q>}.<type><size> <Qd>, <Qn>, <Qm> ; T1 NOLINT(whitespace/line_length)
2584188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmla(CurrentCond(),
2584288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2584388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2584488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2584588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2584688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2584788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2584888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2584988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000940
2585088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2585188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_10_Decode((instr >> 20) & 0x3);
2585288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2585388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2585488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2585588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2585688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2585788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2585888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2585988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2586088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2586188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2586288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2586388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2586488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2586588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2586688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2586788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2586888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2586988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2587088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
25871d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VMLS{<c>}{<q>}.<type><size> <Qd>, <Qn>, <Qm> ; T1 NOLINT(whitespace/line_length)
2587288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmls(CurrentCond(),
2587388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2587488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2587588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2587688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2587788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2587888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2587988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2588088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2588188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2588288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
2588388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000a00
2588488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
2588588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2588688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2588788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2588888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2588988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2589088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2589188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2589288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2589388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VPMAX{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2589488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vpmax(CurrentCond(),
2589588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
2589688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
2589788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn),
2589888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rm));
2589988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2590088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2590188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000b00: {
2590288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000b00
2590388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
2590488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2590588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000b00
2590688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2590788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_13_Decode((instr >> 20) & 0x3);
2590888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2590988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2591088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2591188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2591288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2591388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2591488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2591588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VQDMULH{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2591688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vqdmulh(CurrentCond(),
2591788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
2591888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rd),
2591988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rn),
2592088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm));
2592188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2592288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2592388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2592488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000b00
2592588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2592688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_13_Decode((instr >> 20) & 0x3);
2592788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2592888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2592988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2593088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2593188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2593288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2593388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2593488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VQRDMULH{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2593588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vqrdmulh(CurrentCond(),
2593688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
2593788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2593888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rn),
2593988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm));
2594088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2594188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2594288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2594388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2594488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2594588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000b40: {
2594688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000b40
2594788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
2594888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2594988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000b40
2595088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2595188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_13_Decode((instr >> 20) & 0x3);
2595288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2595388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2595488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2595588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2595688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2595788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2595888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2595988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2596088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2596188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2596288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2596388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2596488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2596588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2596688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2596788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2596888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2596988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2597088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2597188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VQDMULH{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2597288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vqdmulh(CurrentCond(),
2597388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
2597488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
2597588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rn),
2597688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rm));
2597788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2597888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2597988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2598088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000b40
2598188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
2598288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_13_Decode((instr >> 20) & 0x3);
2598388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2598488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2598588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2598688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2598788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2598888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2598988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2599088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2599188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2599288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2599388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2599488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2599588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2599688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2599788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2599888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2599988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2600088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2600188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2600288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VQRDMULH{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
2600388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vqrdmulh(CurrentCond(),
2600488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
2600588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
2600688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rn),
2600788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm));
2600888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2600988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2601088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2601188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2601288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2601388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000c40: {
2601488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000c40
2601588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
2601688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2601788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000c40
2601888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("SHA1C", instr);
2601988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2602088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2602188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100000: {
2602288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef100c40
2602388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("SHA1P", instr);
2602488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2602588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2602688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
2602788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200c40
2602888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("SHA1M", instr);
2602988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2603088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2603188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300000: {
2603288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef300c40
2603388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("SHA1SU0", instr);
2603488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2603588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2603688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2603788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000c40
2603888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("SHA256H", instr);
2603988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2604088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2604188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10100000: {
2604288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff100c40
2604388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("SHA256H2", instr);
2604488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2604588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2604688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
2604788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200c40
2604888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnimplementedT32_32("SHA256SU1", instr);
2604988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2605088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
260514339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2605288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2605388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2605488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2605588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2605688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2605788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000d00: {
2605888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000d00
2605988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
2606088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2606188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000d00
2606288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2606388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2606488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2606588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VADD{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
2606688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vadd(CurrentCond(),
2606788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2606888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2606988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2607088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2607188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2607288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2607388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
2607488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200d00
2607588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2607688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2607788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2607888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSUB{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
2607988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vsub(CurrentCond(),
2608088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2608188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2608288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2608388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2608488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2608588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2608688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2608788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000d00
2608888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2608988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2609088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2609188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VPADD{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
2609288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vpadd(CurrentCond(),
2609388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
2609488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
2609588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
2609688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
2609788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2609888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2609988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
2610088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200d00
2610188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2610288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2610388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2610488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VABD{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
2610588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vabd(CurrentCond(),
2610688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2610788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2610888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2610988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2611088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2611188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
261124339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2611388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2611488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2611588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2611688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2611788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2611888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000d40: {
2611988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000d40
2612088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
2612188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2612288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000d40
2612388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2612488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2612588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2612688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2612788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2612888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2612988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2613088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2613188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2613288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2613388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2613488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2613588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2613688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2613788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2613888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VADD{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
2613988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vadd(CurrentCond(),
2614088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2614188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2614288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2614388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2614488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2614588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2614688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
2614788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200d40
2614888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2614988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2615088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2615188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2615288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2615388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2615488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2615588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2615688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2615788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2615888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2615988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2616088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2616188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2616288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2616388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSUB{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
2616488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vsub(CurrentCond(),
2616588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2616688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2616788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2616888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2616988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2617088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2617188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
2617288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200d40
2617388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2617488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2617588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2617688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2617788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2617888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2617988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2618088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2618188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2618288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2618388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2618488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2618588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2618688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2618788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2618888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VABD{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
2618988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vabd(CurrentCond(),
2619088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2619188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2619288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2619388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2619488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2619588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
261964339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2619788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2619888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2619988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2620088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2620188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2620288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000e00: {
2620388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000e00
2620488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10200000) {
2620588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2620688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000e00
2620788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt = Dt_sz_1_Decode((instr >> 20) & 0x1);
2620888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2620988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2621088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2621188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2621288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2621388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2621488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2621588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VCEQ{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T2
2621688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vceq(CurrentCond(),
2621788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2621888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2621988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2622088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2622188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2622288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2622388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2622488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000e00
2622588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00100000) == 0x00000000) {
2622688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
2622788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = ExtractDRegister(instr, 7, 16);
2622888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
2622988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCGE{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T2
2623088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcge(CurrentCond(),
2623188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
2623288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2623388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
2623488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2623588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2623688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2623788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2623888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2623988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2624088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
2624188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200e00
2624288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00100000) == 0x00000000) {
2624388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
2624488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = ExtractDRegister(instr, 7, 16);
2624588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
2624688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCGT{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T2
2624788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcgt(CurrentCond(),
2624888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
2624988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2625088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
2625188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2625288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2625388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2625488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2625588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2625688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
262574339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2625888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2625988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2626088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2626188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2626288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2626388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000e40: {
2626488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000e40
2626588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10200000) {
2626688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2626788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000e40
2626888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt = Dt_sz_1_Decode((instr >> 20) & 0x1);
2626988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
2627088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2627188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2627288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2627388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2627488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2627588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2627688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2627788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2627888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2627988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2628088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2628188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2628288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2628388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2628488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2628588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2628688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2628788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2628888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VCEQ{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T2
2628988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vceq(CurrentCond(),
2629088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
2629188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2629288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2629388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2629488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2629588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2629688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2629788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000e40
2629888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00100000) == 0x00000000) {
2629988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
2630088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2630188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
2630288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2630388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
2630488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 16) & 1) != 0) {
2630588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2630688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
2630788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2630888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = ExtractQRegister(instr, 7, 16);
2630988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
2631088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2631188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
2631288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2631388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
2631488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCGE{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T2
2631588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcge(CurrentCond(),
2631688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
2631788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
2631888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rn),
2631988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm));
2632088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2632188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2632288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2632388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2632488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2632588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
2632688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200e40
2632788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 0x00100000) == 0x00000000) {
2632888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
2632988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2633088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
2633188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2633288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
2633388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 16) & 1) != 0) {
2633488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2633588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
2633688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2633788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = ExtractQRegister(instr, 7, 16);
2633888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
2633988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2634088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
2634188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2634288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
2634388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCGT{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T2
2634488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcgt(CurrentCond(),
2634588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
2634688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
2634788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rn),
2634888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm));
2634988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              } else {
2635088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2635188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2635288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2635388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
263544339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2635588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2635688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2635788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2635888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2635988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2636088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
2636188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000f00
2636288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
2636388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2636488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000f00
2636588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2636688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2636788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2636888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMAX{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
2636988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmax(CurrentCond(),
2637088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2637188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2637288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2637388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2637488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2637588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2637688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
2637788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200f00
2637888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2637988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2638088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2638188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMIN{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
2638288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmin(CurrentCond(),
2638388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2638488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2638588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2638688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2638788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2638888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2638988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2639088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000f00
2639188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2639288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2639388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2639488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VPMAX{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
2639588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vpmax(CurrentCond(),
2639688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
2639788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
2639888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
2639988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
2640088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2640188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2640288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
2640388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200f00
2640488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2640588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2640688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2640788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VPMIN{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
2640888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vpmin(CurrentCond(),
2640988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
2641088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
2641188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
2641288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
2641388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2641488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
264154339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2641688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2641788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2641888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2641988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2642088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2642188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f40: {
2642288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000f40
2642388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
2642488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2642588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000f40
2642688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2642788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2642888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2642988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2643088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2643188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2643288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2643388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2643488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2643588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2643688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2643788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2643888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2643988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2644088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2644188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMAX{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
2644288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmax(CurrentCond(),
2644388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2644488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2644588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2644688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2644788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2644888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2644988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
2645088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200f40
2645188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
2645288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2645388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2645488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2645588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
2645688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
2645788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2645888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2645988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2646088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
2646188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
2646288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
2646388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2646488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2646588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
2646688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMIN{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
2646788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmin(CurrentCond(),
2646888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
2646988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
2647088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
2647188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
2647288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2647388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
264744339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
2647588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
2647688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2647788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2647888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2647988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
264804339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                        default:
2648188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
2648288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2648388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2648488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2648588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2648688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00800000: {
2648788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xef800000
2648888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00300000) {
2648988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00300000: {
2649088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xefb00000
2649188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
2649288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2649388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xefb00000
2649488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000040) {
2649588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2649688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xefb00000
2649788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x800) == 0x800)) {
2649888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2649988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2650088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2650188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
2650288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2650388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2650488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm = (instr >> 8) & 0xf;
26505d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VEXT{<c>}{<q>}.8 {<Dd>}, <Dn>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
2650688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vext(CurrentCond(),
2650788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Untyped8,
2650888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
2650988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rn),
2651088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm),
2651188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
2651288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2651388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2651488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000040: {
2651588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xefb00040
2651688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2651788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2651888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2651988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2652088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2652188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 16) & 1) != 0) {
2652288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2652388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2652488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2652588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractQRegister(instr, 7, 16);
2652688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
2652788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2652888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2652988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2653088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
2653188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm = (instr >> 8) & 0xf;
26532d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VEXT{<c>}{<q>}.8 {<Qd>}, <Qn>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
2653388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vext(CurrentCond(),
2653488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Untyped8,
2653588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
2653688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rn),
2653788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm),
2653888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
2653988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2654088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2654188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2654288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2654388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2654488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
2654588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xffb00000
2654688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000800) {
2654788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2654888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xffb00000
2654988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00030200) {
2655088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2655188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb00000
2655288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x000005c0) {
2655388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
2655488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00000
2655588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_7_Decode(
2655688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2655788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2655888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2655988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2656088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2656188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2656288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2656388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2656488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
26565d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VREV64{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2656688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vrev64(CurrentCond(),
2656788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2656888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2656988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2657088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2657188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2657288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000040: {
2657388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00040
2657488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_7_Decode(
2657588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2657688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2657788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2657888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2657988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2658088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2658188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2658288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2658388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2658488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2658588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2658688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2658788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2658888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2658988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2659088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2659188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
26592d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VREV64{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2659388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vrev64(CurrentCond(),
2659488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2659588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2659688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2659788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2659888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2659988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000080: {
2660088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00080
2660188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_15_Decode(
2660288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2660388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2660488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2660588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2660688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2660788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2660888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2660988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2661088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
26611d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VREV32{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2661288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vrev32(CurrentCond(),
2661388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2661488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2661588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2661688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2661788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2661888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000000c0: {
2661988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb000c0
2662088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_15_Decode(
2662188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2662288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2662388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2662488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2662588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2662688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2662788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2662888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2662988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2663088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2663188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2663288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2663388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2663488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2663588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2663688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2663788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
26638d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VREV32{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2663988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vrev32(CurrentCond(),
2664088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2664188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2664288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2664388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2664488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2664588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000100: {
2664688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00100
2664788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_1_Decode(
2664888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2664988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2665088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2665188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2665288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2665388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2665488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2665588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2665688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
26657d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VREV16{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2665888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vrev16(CurrentCond(),
2665988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2666088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2666188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2666288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2666388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2666488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000140: {
2666588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00140
2666688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_1_Decode(
2666788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2666888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2666988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2667088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2667188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2667288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2667388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2667488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2667588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2667688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2667788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2667888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2667988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2668088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2668188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2668288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2668388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
26684d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VREV16{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2668588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vrev16(CurrentCond(),
2668688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2668788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2668888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2668988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2669088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2669188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000400: {
2669288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00400
2669388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_5_Decode(
2669488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2669588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2669688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2669788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2669888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2669988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2670088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2670188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2670288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
2670388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VCLS{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1
2670488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcls(CurrentCond(),
2670588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2670688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2670788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm));
2670888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2670988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2671088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000440: {
2671188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00440
2671288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_5_Decode(
2671388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2671488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2671588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2671688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2671788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2671888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2671988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2672088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2672188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2672288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2672388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2672488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2672588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2672688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2672788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2672888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2672988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
2673088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VCLS{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1
2673188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcls(CurrentCond(),
2673288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2673388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2673488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm));
2673588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2673688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2673788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000480: {
2673888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00480
2673988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_4_Decode(
2674088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2674188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2674288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2674388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2674488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2674588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2674688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2674788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2674888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
2674988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VCLZ{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1
2675088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vclz(CurrentCond(),
2675188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2675288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2675388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm));
2675488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2675588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2675688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000004c0: {
2675788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb004c0
2675888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_4_Decode(
2675988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2676088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2676188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2676288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2676388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2676488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2676588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2676688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2676788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2676888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2676988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2677088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2677188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2677288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2677388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2677488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2677588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
2677688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VCLZ{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1
2677788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vclz(CurrentCond(),
2677888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2677988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2678088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm));
2678188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2678288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2678388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000500: {
2678488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00500
2678588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2678688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00000000) {
2678788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2678888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
2678988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2679088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
2679188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // VCNT{<c>}{<q>}.8 <Dd>, <Dm> ; T1
2679288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vcnt(CurrentCond(),
2679388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Untyped8,
2679488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2679588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2679688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2679788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2679888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2679988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2680088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2680188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000540: {
2680288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00540
2680388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2680488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00000000) {
2680588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2680688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2680788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2680888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2680988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2681088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2681188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if ((instr & 1) != 0) {
2681288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2681388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2681488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2681588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2681688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 5, 0);
2681788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // VCNT{<c>}{<q>}.8 <Qd>, <Qm> ; T1
2681888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vcnt(CurrentCond(),
2681988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 Untyped8,
2682088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2682188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2682288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2682388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2682488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2682588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2682688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2682788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000580: {
2682888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00580
2682988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2683088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00000000) {
2683188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2683288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
2683388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2683488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
26835d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}{.<dt>} <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2683688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(CurrentCond(),
2683788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 kDataTypeValueNone,
2683888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2683988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2684088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2684188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2684288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2684388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2684488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2684588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000005c0: {
2684688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb005c0
2684788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2684888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00000000) {
2684988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2685088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2685188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2685288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2685388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2685488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2685588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if ((instr & 1) != 0) {
2685688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2685788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2685888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2685988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2686088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 5, 0);
26861d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}{.<dt>} <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2686288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(CurrentCond(),
2686388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 kDataTypeValueNone,
2686488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2686588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2686688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2686788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2686888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2686988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2687088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
268714339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                        default:
2687288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2687388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2687488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2687588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2687688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2687788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000200: {
2687888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb00200
2687988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000540) {
2688088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
2688188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00200
2688288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_op_size_2_Decode(
2688388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2688488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 5) & 0x4));
2688588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2688688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2688788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2688888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2688988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2689088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2689188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2689288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
26893d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VPADDL{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2689488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vpaddl(CurrentCond(),
2689588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2689688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2689788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2689888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2689988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2690088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000040: {
2690188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00240
2690288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_op_size_2_Decode(
2690388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2690488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 5) & 0x4));
2690588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2690688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2690788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2690888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2690988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2691088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2691188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2691288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2691388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2691488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2691588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2691688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2691788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2691888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2691988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2692088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
26921d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VPADDL{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2692288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vpaddl(CurrentCond(),
2692388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2692488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2692588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2692688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2692788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2692888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000100: {
2692988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00300
2693088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000080) {
2693188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2693288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb00300
2693388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("AESE",
2693488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  instr);
2693588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2693688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2693788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000080: {
2693888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb00380
2693988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("AESMC",
2694088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  instr);
2694188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2694288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2694388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2694488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2694588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2694688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000140: {
2694788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00340
2694888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000080) {
2694988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2695088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb00340
2695188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("AESD",
2695288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  instr);
2695388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2695488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2695588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000080: {
2695688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb003c0
2695788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("AESIMC",
2695888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  instr);
2695988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2696088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2696188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2696288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2696388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2696488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000400: {
2696588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00600
2696688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_op_size_2_Decode(
2696788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2696888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 5) & 0x4));
2696988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2697088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2697188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2697288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2697388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2697488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2697588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2697688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
26977d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VPADAL{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2697888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vpadal(CurrentCond(),
2697988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2698088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2698188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2698288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2698388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2698488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000440: {
2698588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00640
2698688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_op_size_2_Decode(
2698788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2698888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 5) & 0x4));
2698988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2699088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2699188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2699288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2699388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2699488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2699588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2699688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2699788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2699888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2699988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2700088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2700188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2700288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2700388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2700488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
27005d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VPADAL{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2700688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vpadal(CurrentCond(),
2700788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2700888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2700988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2701088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2701188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2701288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000500: {
2701388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00700
2701488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000080) {
2701588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2701688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb00700
2701788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_size_5_Decode(
2701888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 18) & 0x3);
2701988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2702088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2702188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2702288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2702388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2702488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2702588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2702688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2702788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2702888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2702988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
27030d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VQABS{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2703188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vqabs(CurrentCond(),
2703288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
2703388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rd),
2703488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
2703588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2703688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2703788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000080: {
2703888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb00780
2703988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_size_5_Decode(
2704088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 18) & 0x3);
2704188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2704288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2704388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2704488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2704588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2704688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2704788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2704888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2704988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2705088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2705188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
27052d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VQNEG{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2705388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vqneg(CurrentCond(),
2705488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
2705588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rd),
2705688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
2705788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2705888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2705988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2706088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2706188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2706288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000540: {
2706388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00740
2706488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000080) {
2706588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2706688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb00740
2706788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_size_5_Decode(
2706888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 18) & 0x3);
2706988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2707088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2707188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2707288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2707388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2707488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2707588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2707688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2707788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2707888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2707988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2708088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2708188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2708288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2708388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2708488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2708588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2708688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2708788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
27088d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VQABS{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2708988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vqabs(CurrentCond(),
2709088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
2709188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
2709288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rm));
2709388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2709488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2709588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000080: {
2709688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb007c0
2709788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_size_5_Decode(
2709888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 18) & 0x3);
2709988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2710088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2710188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2710288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2710388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2710488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2710588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2710688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2710788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2710888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2710988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2711088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2711188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2711288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2711388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2711488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2711588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2711688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2711788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
27118d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VQNEG{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2711988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vqneg(CurrentCond(),
2712088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
2712188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
2712288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rm));
2712388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2712488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2712588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2712688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2712788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2712888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2712988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2713088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2713188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010000: {
2713288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb10000
2713388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x000001c0) {
2713488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
2713588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10000
2713688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2713788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2713888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2713988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2714088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2714188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2714288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2714388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2714488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2714588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2714688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
27147d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCGT{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; T1 NOLINT(whitespace/line_length)
2714888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcgt(CurrentCond(),
2714988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2715088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2715188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm),
2715288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2715388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2715488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2715588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000040: {
2715688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10040
2715788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2715888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2715988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2716088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2716188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2716288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2716388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2716488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2716588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2716688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2716788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2716888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2716988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2717088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2717188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2717288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2717388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2717488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2717588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
27176d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCGT{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; T1 NOLINT(whitespace/line_length)
2717788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcgt(CurrentCond(),
2717888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2717988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2718088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm),
2718188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2718288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2718388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2718488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000080: {
2718588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10080
2718688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2718788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2718888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2718988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2719088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2719188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2719288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2719388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2719488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2719588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2719688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
27197d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCGE{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; T1 NOLINT(whitespace/line_length)
2719888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcge(CurrentCond(),
2719988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2720088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2720188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm),
2720288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2720388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2720488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2720588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000000c0: {
2720688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb100c0
2720788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2720888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2720988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2721088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2721188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2721288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2721388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2721488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2721588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2721688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2721788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2721888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2721988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2722088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2722188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2722288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2722388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2722488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2722588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
27226d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCGE{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; T1 NOLINT(whitespace/line_length)
2722788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcge(CurrentCond(),
2722888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2722988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2723088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm),
2723188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2723288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2723388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2723488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000100: {
2723588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10100
2723688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_2_Decode(
2723788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2723888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2723988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2724088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2724188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2724288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2724388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2724488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2724588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2724688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
27247d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCEQ{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; T1 NOLINT(whitespace/line_length)
2724888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vceq(CurrentCond(),
2724988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2725088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2725188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm),
2725288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2725388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2725488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2725588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000140: {
2725688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10140
2725788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_2_Decode(
2725888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2725988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2726088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2726188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2726288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2726388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2726488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2726588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2726688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2726788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2726888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2726988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2727088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2727188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2727288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2727388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2727488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2727588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
27276d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCEQ{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; T1 NOLINT(whitespace/line_length)
2727788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vceq(CurrentCond(),
2727888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2727988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2728088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm),
2728188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2728288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2728388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2728488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000180: {
2728588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10180
2728688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2728788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2728888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2728988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2729088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2729188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2729288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2729388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2729488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2729588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2729688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
27297d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCLE{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; T1 NOLINT(whitespace/line_length)
2729888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcle(CurrentCond(),
2729988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2730088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2730188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm),
2730288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2730388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2730488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2730588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000001c0: {
2730688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb101c0
2730788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2730888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2730988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2731088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2731188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2731288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2731388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2731488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2731588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2731688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2731788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2731888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2731988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2732088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2732188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2732288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2732388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2732488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2732588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
27326d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCLE{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; T1 NOLINT(whitespace/line_length)
2732788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcle(CurrentCond(),
2732888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2732988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2733088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm),
2733188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2733288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2733388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2733488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2733588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2733688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2733788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00010200: {
2733888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb10200
2733988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x000001c0) {
2734088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
2734188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10200
2734288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2734388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2734488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2734588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2734688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2734788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2734888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2734988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2735088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2735188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2735288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
27353d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCLT{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; T1 NOLINT(whitespace/line_length)
2735488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vclt(CurrentCond(),
2735588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2735688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2735788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm),
2735888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2735988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2736088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2736188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000040: {
2736288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10240
2736388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2736488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2736588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2736688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2736788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2736888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2736988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2737088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2737188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2737288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2737388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2737488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2737588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2737688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2737788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2737888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2737988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2738088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2738188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
27382d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCLT{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; T1 NOLINT(whitespace/line_length)
2738388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vclt(CurrentCond(),
2738488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2738588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2738688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm),
2738788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               UINT32_C(0));
2738888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2738988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2739088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000000c0: {
2739188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb102c0
2739288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0400) ==
2739388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2739488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnimplementedT32_32("SHA1H", instr);
2739588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2739688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2739788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2739888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2739988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2740088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000100: {
2740188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10300
2740288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2740388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2740488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2740588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2740688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2740788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2740888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2740988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2741088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2741188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2741288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
2741388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VABS{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1
2741488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vabs(CurrentCond(),
2741588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2741688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2741788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm));
2741888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2741988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2742088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000140: {
2742188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10340
2742288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2742388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2742488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2742588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2742688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2742788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2742888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2742988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2743088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2743188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2743288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2743388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2743488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2743588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2743688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2743788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2743888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2743988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2744088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
2744188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VABS{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1
2744288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vabs(CurrentCond(),
2744388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2744488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2744588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm));
2744688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2744788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2744888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000180: {
2744988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb10380
2745088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2745188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2745288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2745388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2745488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2745588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2745688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2745788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2745888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2745988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2746088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
2746188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VNEG{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1
2746288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vneg(CurrentCond(),
2746388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2746488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2746588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm));
2746688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2746788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2746888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000001c0: {
2746988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb103c0
2747088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_F_size_1_Decode(
2747188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2747288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0x4));
2747388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2747488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2747588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2747688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2747788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2747888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2747988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2748088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2748188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2748288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2748388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2748488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2748588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2748688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2748788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2748888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
2748988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VNEG{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1
2749088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vneg(CurrentCond(),
2749188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2749288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2749388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm));
2749488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2749588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
274964339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                        default:
2749788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2749888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2749988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2750088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2750188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2750288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00020000: {
2750388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb20000
2750488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x000005c0) {
2750588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
2750688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20000
2750788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2750888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00000000) {
2750988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2751088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
2751188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2751288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
27513d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VSWP{<c>}{<q>}{.<dt>} <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2751488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vswp(CurrentCond(),
2751588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 kDataTypeValueNone,
2751688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2751788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2751888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2751988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2752088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2752188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2752288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2752388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000040: {
2752488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20040
2752588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2752688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00000000) {
2752788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2752888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2752988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2753088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2753188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2753288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2753388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if ((instr & 1) != 0) {
2753488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2753588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2753688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2753788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2753888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 5, 0);
27539d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VSWP{<c>}{<q>}{.<dt>} <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2754088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vswp(CurrentCond(),
2754188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 kDataTypeValueNone,
2754288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2754388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2754488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2754588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2754688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2754788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2754888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2754988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000080: {
2755088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20080
2755188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_7_Decode(
2755288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2755388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2755488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2755588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2755688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2755788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2755888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2755988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2756088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
2756188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VTRN{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1
2756288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vtrn(CurrentCond(),
2756388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2756488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2756588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm));
2756688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2756788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2756888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000000c0: {
2756988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb200c0
2757088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_7_Decode(
2757188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2757288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2757388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2757488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2757588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2757688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2757788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2757888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2757988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2758088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2758188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2758288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2758388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2758488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2758588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2758688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2758788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
2758888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VTRN{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1
2758988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vtrn(CurrentCond(),
2759088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2759188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2759288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm));
2759388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2759488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2759588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000100: {
2759688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20100
2759788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_15_Decode(
2759888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2759988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2760088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2760188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2760288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2760388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2760488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2760588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2760688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
2760788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VUZP{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1
2760888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vuzp(CurrentCond(),
2760988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2761088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2761188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm));
2761288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2761388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2761488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000140: {
2761588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20140
2761688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_7_Decode(
2761788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2761888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2761988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2762088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2762188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2762288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2762388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2762488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2762588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2762688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2762788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2762888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2762988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2763088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2763188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2763288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2763388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
2763488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VUZP{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1
2763588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vuzp(CurrentCond(),
2763688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2763788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2763888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm));
2763988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2764088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2764188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000180: {
2764288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20180
2764388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_15_Decode(
2764488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2764588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2764688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2764788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2764888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2764988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2765088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2765188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2765288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
2765388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VZIP{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1
2765488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vzip(CurrentCond(),
2765588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2765688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2765788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm));
2765888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2765988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2766088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000001c0: {
2766188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb201c0
2766288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_size_7_Decode(
2766388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 18) & 0x3);
2766488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2766588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2766688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2766788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2766888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2766988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2767088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2767188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2767288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2767388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2767488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2767588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2767688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2767788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2767888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2767988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
2768088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // VZIP{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1
2768188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vzip(CurrentCond(),
2768288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
2768388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2768488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm));
2768588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2768688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2768788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000400: {
2768888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20400
2768988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2769088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2769188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2769288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
2769388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2769488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
27695d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VRINTN{<q>}.F32.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2769688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vrintn(F32,
2769788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2769888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rd),
2769988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rm));
2770088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2770188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2770288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2770388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2770488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2770588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000440: {
2770688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20440
2770788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2770888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2770988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2771088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2771188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2771288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2771388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2771488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2771588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if ((instr & 1) != 0) {
2771688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2771788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2771888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2771988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2772088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 5, 0);
27721d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VRINTN{<q>}.F32.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2772288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vrintn(F32,
2772388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2772488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rd),
2772588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rm));
2772688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2772788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2772888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2772988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2773088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2773188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000480: {
2773288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20480
2773388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2773488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2773588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2773688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
2773788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2773888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
27739d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VRINTX{<q>}.F32.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
27740fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                            vrintx(Condition::None(),
2774188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2774288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2774388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rd),
2774488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rm));
2774588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2774688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2774788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2774888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2774988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2775088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000004c0: {
2775188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb204c0
2775288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2775388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2775488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2775588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2775688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2775788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2775888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2775988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2776088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if ((instr & 1) != 0) {
2776188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2776288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2776388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2776488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2776588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 5, 0);
27766d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VRINTX{<q>}.F32.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2776788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vrintx(F32,
2776888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2776988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rd),
2777088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rm));
2777188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2777288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2777388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2777488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2777588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2777688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000500: {
2777788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20500
2777888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2777988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2778088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2778188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
2778288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2778388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
27784d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VRINTA{<q>}.F32.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2778588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vrinta(F32,
2778688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2778788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rd),
2778888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rm));
2778988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2779088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2779188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2779288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2779388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2779488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000540: {
2779588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20540
2779688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2779788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2779888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2779988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2780088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2780188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2780288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2780388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2780488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if ((instr & 1) != 0) {
2780588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2780688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2780788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2780888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2780988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 5, 0);
27810d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VRINTA{<q>}.F32.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2781188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vrinta(F32,
2781288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2781388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rd),
2781488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rm));
2781588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2781688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2781788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2781888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2781988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2782088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000580: {
2782188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20580
2782288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2782388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2782488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2782588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
2782688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2782788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
27828d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VRINTZ{<q>}.F32.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
27829fad350715bbb9f13ea85c84da4e6095dfee3cd15Vincent Belliard                                            vrintz(Condition::None(),
2783088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2783188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2783288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rd),
2783388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rm));
2783488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2783588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2783688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2783788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2783888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2783988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x000005c0: {
2784088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb205c0
2784188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0000) ==
2784288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00080000) {
2784388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2784488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2784588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2784688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2784788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2784888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2784988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if ((instr & 1) != 0) {
2785088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2785188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2785288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2785388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2785488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 5, 0);
27855d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VRINTZ{<q>}.F32.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2785688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vrintz(F32,
2785788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   F32,
2785888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rd),
2785988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rm));
2786088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2786188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2786288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2786388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2786488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2786588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2786688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2786788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2786888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00020200: {
2786988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb20200
2787088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000580) {
2787188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
2787288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20200
2787388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000040) {
2787488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2787588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb20200
2787688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_size_3_Decode(
2787788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 18) & 0x3);
2787888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2787988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2788088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2788188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2788288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2788388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2788488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2788588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2788688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2788788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2788888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2788988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2789088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2789188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2789288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
27893d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMOVN{<c>}{<q>}.<dt> <Dd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2789488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmovn(CurrentCond(),
2789588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
2789688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rd),
2789788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rm));
2789888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2789988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2790088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000040: {
2790188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb20240
2790288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_size_14_Decode(
2790388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 18) & 0x3);
2790488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2790588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2790688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2790788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2790888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2790988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2791088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2791188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2791288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2791388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2791488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2791588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2791688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2791788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2791888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
27919d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VQMOVUN{<c>}{<q>}.<dt> <Dd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2792088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vqmovun(CurrentCond(),
2792188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      dt,
2792288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(rd),
2792388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      QRegister(rm));
2792488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2792588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2792688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2792788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2792888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2792988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000080: {
2793088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20280
2793188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_op_size_3_Decode(
2793288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 18) & 0x3) |
2793388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 4) & 0x4));
2793488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
2793588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2793688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2793788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2793888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2793988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2794088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2794188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2794288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2794388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2794488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2794588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
27946d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VQMOVN{<c>}{<q>}.<dt> <Dd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2794788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vqmovn(CurrentCond(),
2794888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
2794988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2795088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2795188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2795288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2795388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000100: {
2795488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20300
2795588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x00000040) ==
2795688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00000000) {
2795788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt = Dt_size_16_Decode(
2795888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                (instr >> 18) & 0x3);
2795988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
2796088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2796188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2796288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2796388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2796488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2796588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2796688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2796788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2796888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2796988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2797088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
2797188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            uint32_t imm = dt.GetSize();
27972d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T2 NOLINT(whitespace/line_length)
2797388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vshll(CurrentCond(),
2797488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  dt,
2797588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QRegister(rd),
2797688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(rm),
2797788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm);
2797888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2797988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2798088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2798188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2798288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2798388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000180: {
2798488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20380
2798588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x000c0040) {
2798688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080000: {
2798788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffba0380
2798888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("SHA1SU1",
2798988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  instr);
2799088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2799188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2799288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080040: {
2799388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffba03c0
2799488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnimplementedT32_32("SHA256SU0",
2799588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  instr);
2799688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2799788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
279984339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                            default:
2799988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2800088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2800188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2800288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2800388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2800488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000400: {
2800588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20600
2800688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0040) ==
2800788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00040000) {
2800888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2800988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
2801088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if ((instr & 1) != 0) {
2801188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2801288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2801388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2801488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2801588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 5, 0);
28016d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VCVT{<c>}{<q>}.F16.F32 <Dd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2801788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vcvt(CurrentCond(),
2801888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 F16,
2801988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 F32,
2802088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
2802188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm));
2802288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2802388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2802488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2802588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2802688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2802788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000480: {
2802888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20680
2802988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x000c0040) {
2803088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080000: {
2803188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffba0680
2803288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2803388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2803488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2803588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2803688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2803788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
28038d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VRINTM{<q>}.F32.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2803988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vrintm(F32,
2804088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     F32,
2804188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     DRegister(rd),
2804288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     DRegister(rm));
2804388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2804488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2804588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080040: {
2804688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffba06c0
2804788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2804888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2804988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2805088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2805188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2805288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2805388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2805488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2805588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2805688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2805788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2805888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2805988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2806088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
28061d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VRINTM{<q>}.F32.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2806288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vrintm(F32,
2806388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     F32,
2806488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     QRegister(rd),
2806588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     QRegister(rm));
2806688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2806788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
280684339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                            default:
2806988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2807088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2807188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2807288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2807388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2807488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000500: {
2807588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20700
2807688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 0x000c0040) ==
2807788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              0x00040000) {
2807888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
2807988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2808088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
2808188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2808288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
2808388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
2808488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rm =
2808588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 5, 0);
28086d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VCVT{<c>}{<q>}.F32.F16 <Qd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2808788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vcvt(CurrentCond(),
2808888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 F32,
2808988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 F16,
2809088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rd),
2809188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rm));
2809288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          } else {
2809388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2809488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2809588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2809688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2809788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000580: {
2809888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb20780
2809988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x000c0040) {
2810088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080000: {
2810188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffba0780
2810288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2810388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2810488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2810588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2810688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2810788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
28108d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VRINTP{<q>}.F32.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2810988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vrintp(F32,
2811088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     F32,
2811188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     DRegister(rd),
2811288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     DRegister(rm));
2811388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2811488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2811588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080040: {
2811688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffba07c0
2811788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2811888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2811988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2812088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2812188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2812288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2812388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2812488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2812588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2812688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2812788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2812888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2812988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2813088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
28131d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VRINTP{<q>}.F32.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2813288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vrintp(F32,
2813388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     F32,
2813488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     QRegister(rd),
2813588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     QRegister(rm));
2813688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2813788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
281384339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                            default:
2813988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2814088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2814188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2814288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2814388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2814488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2814588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2814688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2814788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00030000: {
2814888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb30000
2814988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000440) {
2815088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
2815188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb30000
2815288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x000c0100) {
2815388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080000: {
2815488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffbb0000
2815588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_op_3_Decode(
2815688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 7) & 0x1);
2815788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2815888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2815988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2816088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2816188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2816288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2816388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2816488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2816588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2816688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2816788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
28168d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VCVTA{<q>}.<dt>.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2816988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vcvta(dt,
2817088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    F32,
2817188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rd),
2817288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
2817388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2817488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2817588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080100: {
2817688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffbb0100
2817788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_op_3_Decode(
2817888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 7) & 0x1);
2817988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2818088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2818188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2818288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2818388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2818488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2818588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2818688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2818788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2818888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2818988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
28190d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VCVTN{<q>}.<dt>.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2819188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vcvtn(dt,
2819288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    F32,
2819388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rd),
2819488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
2819588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2819688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
281974339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                            default:
2819888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2819988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2820088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2820188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2820288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2820388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000040: {
2820488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb30040
2820588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x000c0100) {
2820688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080000: {
2820788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffbb0040
2820888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_op_3_Decode(
2820988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 7) & 0x1);
2821088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2821188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2821288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2821388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2821488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2821588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2821688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2821788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2821888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2821988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2822088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2822188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2822288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2822388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2822488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2822588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2822688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2822788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2822888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
28229d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VCVTA{<q>}.<dt>.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2823088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vcvta(dt,
2823188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    F32,
2823288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
2823388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rm));
2823488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2823588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2823688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080100: {
2823788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffbb0140
2823888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_op_3_Decode(
2823988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 7) & 0x1);
2824088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2824188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2824288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2824388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2824488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2824588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2824688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2824788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2824888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2824988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2825088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2825188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2825288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2825388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2825488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2825588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2825688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2825788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2825888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
28259d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VCVTN{<q>}.<dt>.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2826088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vcvtn(dt,
2826188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    F32,
2826288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
2826388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rm));
2826488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2826588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
282664339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                            default:
2826788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
2826888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2826988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2827088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2827188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2827288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000400: {
2827388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb30400
2827488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000080) {
2827588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2827688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb30400
2827788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_F_size_4_Decode(
2827888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 18) & 0x3) |
2827988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 6) & 0x4));
2828088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2828188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2828288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2828388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2828488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2828588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2828688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2828788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2828888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2828988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2829088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
28291d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VRECPE{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2829288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vrecpe(CurrentCond(),
2829388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     dt,
2829488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     DRegister(rd),
2829588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     DRegister(rm));
2829688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2829788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2829888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000080: {
2829988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb30480
2830088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_F_size_4_Decode(
2830188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 18) & 0x3) |
2830288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 6) & 0x4));
2830388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2830488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2830588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2830688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2830788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2830888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2830988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2831088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2831188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2831288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2831388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
28314d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VRSQRTE{<c>}{<q>}.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2831588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vrsqrte(CurrentCond(),
2831688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      dt,
2831788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(rd),
2831888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(rm));
2831988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2832088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2832188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2832288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2832388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2832488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000440: {
2832588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb30440
2832688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000080) {
2832788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2832888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb30440
2832988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_F_size_4_Decode(
2833088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 18) & 0x3) |
2833188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 6) & 0x4));
2833288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2833388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2833488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2833588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2833688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2833788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2833888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2833988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2834088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2834188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2834288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2834388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2834488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2834588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2834688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2834788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2834888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2834988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2835088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
28351d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VRECPE{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2835288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vrecpe(CurrentCond(),
2835388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     dt,
2835488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     QRegister(rd),
2835588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     QRegister(rm));
2835688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2835788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2835888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000080: {
2835988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffb304c0
2836088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_F_size_4_Decode(
2836188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 18) & 0x3) |
2836288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 6) & 0x4));
2836388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2836488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2836588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2836688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2836788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2836888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2836988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2837088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2837188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2837288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2837388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2837488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2837588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2837688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2837788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2837888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2837988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2838088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2838188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
28382d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VRSQRTE{<c>}{<q>}.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2838388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vrsqrte(CurrentCond(),
2838488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      dt,
2838588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      QRegister(rd),
2838688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      QRegister(rm));
2838788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2838888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2838988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2839088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2839188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2839288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2839388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2839488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2839588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00030200: {
2839688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb30200
2839788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x000c0440) {
2839888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00080000: {
2839988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffbb0200
2840088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000100) {
2840188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2840288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffbb0200
2840388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_op_3_Decode(
2840488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 7) & 0x1);
2840588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2840688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2840788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2840888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2840988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2841088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2841188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2841288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2841388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2841488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2841588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
28416d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VCVTP{<q>}.<dt>.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2841788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vcvtp(dt,
2841888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    F32,
2841988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rd),
2842088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
2842188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2842288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2842388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000100: {
2842488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffbb0300
2842588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_op_3_Decode(
2842688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 7) & 0x1);
2842788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2842888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2842988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2843088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2843188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2843288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2843388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
2843488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2843588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2843688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2843788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
28438d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VCVTM{<q>}.<dt>.F32 <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2843988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vcvtm(dt,
2844088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    F32,
2844188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rd),
2844288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
2844388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2844488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2844588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2844688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2844788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2844888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00080040: {
2844988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffbb0240
2845088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000100) {
2845188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000000: {
2845288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffbb0240
2845388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_op_3_Decode(
2845488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 7) & 0x1);
2845588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2845688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2845788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2845888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2845988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2846088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2846188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2846288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2846388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2846488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2846588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2846688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2846788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2846888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2846988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2847088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2847188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2847288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2847388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
28474d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VCVTP{<q>}.<dt>.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2847588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vcvtp(dt,
2847688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    F32,
2847788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
2847888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rm));
2847988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2848088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2848188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000100: {
2848288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xffbb0340
2848388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_op_3_Decode(
2848488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 7) & 0x1);
2848588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
2848688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
2848788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2848888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2848988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2849088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
2849188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2849288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2849388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2849488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
2849588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
2849688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
2849788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
2849888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if ((instr & 1) != 0) {
2849988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
2850088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
2850188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
2850288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
2850388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr, 5, 0);
28504d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VCVTM{<q>}.<dt>.F32 <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2850588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vcvtm(dt,
2850688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    F32,
2850788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
2850888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rm));
2850988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
2851088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
2851188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2851288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2851388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2851488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00080400: {
2851588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffbb0600
2851688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt1 = Dt_op_1_Decode1(
2851788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 7) & 0x3);
2851888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt1.Is(kDataTypeValueInvalid)) {
2851988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2852088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2852188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2852288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt2 = Dt_op_1_Decode2(
2852388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 7) & 0x3);
2852488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt2.Is(kDataTypeValueInvalid)) {
2852588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2852688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2852788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2852888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2852988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
2853088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2853188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
28532d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCVT{<c>}{<q>}.<dt>.<dt> <Dd>, <Dm> ; T1 NOLINT(whitespace/line_length)
2853388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcvt(CurrentCond(),
2853488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt1,
2853588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt2,
2853688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
2853788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rm));
2853888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2853988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2854088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00080440: {
2854188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffbb0640
2854288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt1 = Dt_op_1_Decode1(
2854388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 7) & 0x3);
2854488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt1.Is(kDataTypeValueInvalid)) {
2854588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2854688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2854788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2854888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt2 = Dt_op_1_Decode2(
2854988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 7) & 0x3);
2855088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt2.Is(kDataTypeValueInvalid)) {
2855188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2855288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2855388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2855488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
2855588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2855688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2855788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2855888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
2855988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
2856088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
2856188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
2856288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
2856388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
2856488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
2856588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
28566d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VCVT{<c>}{<q>}.<dt>.<dt> <Qd>, <Qm> ; T1 NOLINT(whitespace/line_length)
2856788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vcvt(CurrentCond(),
2856888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt1,
2856988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt2,
2857088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
2857188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rm));
2857288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2857388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
285744339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                        default:
2857588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2857688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2857788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2857888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2857988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2858088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2858188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2858288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2858388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000800: {
2858488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xffb00800
2858588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000440) {
2858688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2858788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb00800
2858888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2858988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2859088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
2859188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 7, 16);
2859288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
2859388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing = kSingle;
2859488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 8) & 0x3) {
2859588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
2859688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
2859788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
2859888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 1;
2859988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2860088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
2860188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 2;
2860288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2860388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x2:
2860488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 3;
2860588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2860688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x3:
2860788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 4;
2860888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2860988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2861088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last = first + length - 1;
2861188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kMultipleLanes;
2861288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2861388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
28614d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VTBL{<c>}{<q>}.8 <Dd>, <list>, <Dm> ; T1 NOLINT(whitespace/line_length)
2861588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vtbl(CurrentCond(),
2861688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           Untyped8,
2861788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2861888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
2861988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
2862088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
2862188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
2862288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2862388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2862488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2862588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000040: {
2862688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb00840
2862788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2862888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2862988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned first =
2863088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 7, 16);
2863188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned length;
2863288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SpacingType spacing = kSingle;
2863388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch ((instr >> 8) & 0x3) {
2863488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default:
2863588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          VIXL_UNREACHABLE_OR_FALLTHROUGH();
2863688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x0:
2863788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 1;
2863888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2863988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x1:
2864088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 2;
2864188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2864288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x2:
2864388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 3;
2864488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2864588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x3:
2864688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          length = 4;
2864788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
2864888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2864988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned last = first + length - 1;
2865088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      TransferType transfer = kMultipleLanes;
2865188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2865288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
28653d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VTBX{<c>}{<q>}.8 <Dd>, <list>, <Dm> ; T1 NOLINT(whitespace/line_length)
2865488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vtbx(CurrentCond(),
2865588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           Untyped8,
2865688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2865788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           NeonRegisterList(DRegister(first),
2865888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            DRegister(last),
2865988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            spacing,
2866088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            transfer),
2866188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
2866288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2866388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2866488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000400: {
2866588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb00c00
2866688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x00000380) == 0x00000000) {
2866788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned lane;
2866888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
2866988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm4_1_Decode((instr >> 16) &
2867088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0xf,
2867188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             &lane);
2867288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
2867388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2867488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2867588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2867688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
2867788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 22, 12);
2867888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
2867988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
28680d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VDUP{<c>}{<q>}.<dt> <Dd>, <Dm[x]> ; T1 NOLINT(whitespace/line_length)
2868188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vdup(CurrentCond(),
2868288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
2868388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
2868488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegisterLane(rm, lane));
2868588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
2868688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2868788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2868888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2868988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2869088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000440: {
2869188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xffb00c40
2869288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x00000380) == 0x00000000) {
2869388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned lane;
2869488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
2869588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm4_1_Decode((instr >> 16) &
2869688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0xf,
2869788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             &lane);
2869888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
2869988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2870088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2870188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2870288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
2870388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2870488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2870588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2870688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
2870788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
2870888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
2870988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
28710d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VDUP{<c>}{<q>}.<dt> <Qd>, <Dm[x]> ; T1 NOLINT(whitespace/line_length)
2871188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vdup(CurrentCond(),
2871288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
2871388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rd),
2871488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegisterLane(rm, lane));
2871588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
2871688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2871788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2871888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2871988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2872088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2872188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2872288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2872388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2872488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2872588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2872688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2872788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2872888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2872988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        default: {
2873088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000c40) {
2873188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2873288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800000
2873388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000300) {
2873488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2873588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800000
2873688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2873788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2873888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2873988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2874088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2874188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
2874288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 26) & 0x4));
2874388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2874488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2874588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2874688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2874788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2874888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2874988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2875088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2875188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2875288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2875388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2875488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VADDL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; T1
2875588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vaddl(CurrentCond(),
2875688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2875788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2875888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rn),
2875988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2876088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2876188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2876288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
2876388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800100
2876488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2876588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2876688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2876788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2876888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2876988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
2877088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 26) & 0x4));
2877188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2877288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2877388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2877488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2877588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2877688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2877788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2877888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2877988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2878088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 16) & 1) != 0) {
2878188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2878288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2878388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2878488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractQRegister(instr, 7, 16);
2878588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
28786d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VADDW{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2878788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vaddw(CurrentCond(),
2878888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2878988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2879088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rn),
2879188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2879288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2879388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2879488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
2879588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800200
2879688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2879788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2879888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2879988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2880088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2880188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
2880288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 26) & 0x4));
2880388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2880488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2880588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2880688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2880788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2880888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2880988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2881088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2881188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2881288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2881388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2881488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VSUBL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; T1
2881588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vsubl(CurrentCond(),
2881688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2881788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2881888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rn),
2881988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2882088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2882188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2882288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
2882388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800300
2882488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2882588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2882688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2882788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2882888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2882988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
2883088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 26) & 0x4));
2883188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2883288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2883388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2883488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2883588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2883688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2883788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2883888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2883988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2884088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 16) & 1) != 0) {
2884188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2884288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2884388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2884488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractQRegister(instr, 7, 16);
2884588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
28846d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VSUBW{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2884788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vsubw(CurrentCond(),
2884888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2884988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2885088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rn),
2885188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2885288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2885388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2885488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2885588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2885688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2885788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000040: {
2885888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800040
2885988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000200) {
2886088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2886188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800040
2886288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x10000000) {
2886388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2886488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800040
2886588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2886688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2886788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2886888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2886988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2887088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_9_Decode((instr >> 20) & 0x3,
2887188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 8) & 0x1);
2887288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2887388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2887488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2887588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2887688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2887788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2887888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2887988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 7, 16);
2888088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane;
2888188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2888288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegisterAndLane(instr,
2888388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  dt,
2888488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  5,
2888588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  0,
2888688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  &lane);
28887d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMLA{<c>}{<q>}.<type><size> <Dd>, <Dn>, <Dm[x]> ; T1 NOLINT(whitespace/line_length)
2888888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmla(CurrentCond(),
2888988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
2889088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2889188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rn),
2889288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegisterLane(rm, lane));
2889388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2889488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2889588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x10000000: {
2889688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xff800040
2889788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2889888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2889988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2890088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2890188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2890288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_9_Decode((instr >> 20) & 0x3,
2890388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 8) & 0x1);
2890488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2890588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2890688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2890788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2890888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
2890988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2891088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2891188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2891288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2891388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
2891488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 16) & 1) != 0) {
2891588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2891688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2891788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2891888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2891988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 7, 16);
2892088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane;
2892188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2892288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegisterAndLane(instr,
2892388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  dt,
2892488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  5,
2892588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  0,
2892688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  &lane);
28927d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMLA{<c>}{<q>}.<type><size> <Qd>, <Qn>, <Dm[x]> ; T1 NOLINT(whitespace/line_length)
2892888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmla(CurrentCond(),
2892988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
2893088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
2893188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rn),
2893288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegisterLane(rm, lane));
2893388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2893488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2893588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2893688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2893788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2893888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
2893988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800240
2894088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000100) {
2894188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2894288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800240
2894388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2894488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2894588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2894688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2894788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2894888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_11_Decode((instr >> 20) & 0x3,
2894988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 28) &
2895088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1);
2895188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2895288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2895388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2895488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2895588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
2895688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2895788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2895888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2895988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2896088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
2896188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2896288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 7, 16);
2896388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane;
2896488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2896588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegisterAndLane(instr,
2896688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  dt,
2896788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  5,
2896888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  0,
2896988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  &lane);
28970d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMLAL{<c>}{<q>}.<type><size> <Qd>, <Dn>, <Dm[x]> ; T1 NOLINT(whitespace/line_length)
2897188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmlal(CurrentCond(),
2897288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
2897388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
2897488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rn),
2897588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegisterLane(rm, lane));
2897688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2897788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2897888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
2897988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800340
2898088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x10000000) == 0x00000000) {
2898188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x300000) == 0x300000)) {
2898288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2898388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2898488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2898588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt = Dt_size_13_Decode(
2898688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr >> 20) & 0x3);
2898788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
2898888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2898988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2899088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2899188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
2899288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2899388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2899488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2899588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
2899688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
2899788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rn =
2899888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 7, 16);
2899988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t mvm = (instr & 0xf) |
2900088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 1) & 0x10);
2900188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t shift = 4;
2900288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(S16)) {
2900388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          shift = 3;
2900488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2900588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t vm = mvm & ((1 << shift) - 1);
2900688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t index = mvm >> shift;
29007d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VQDMLAL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm>[<index>] ; T2 NOLINT(whitespace/line_length)
2900888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vqdmlal(CurrentCond(),
2900988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
2901088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rd),
2901188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rn),
2901288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(vm),
2901388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                index);
2901488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
2901588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2901688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2901788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2901888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2901988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2902088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2902188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2902288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2902388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2902488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2902588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000400: {
2902688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800400
2902788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000300) {
2902888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2902988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800400
2903088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x10000000) {
2903188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2903288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800400
2903388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2903488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2903588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2903688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2903788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2903888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_3_Decode((instr >> 20) & 0x3);
2903988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2904088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2904188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2904288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2904388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2904488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2904588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 16) & 1) != 0) {
2904688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2904788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2904888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2904988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2905088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 7, 16);
2905188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
2905288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2905388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2905488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2905588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2905688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
29057d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VADDHN{<c>}{<q>}.<dt> <Dd>, <Qn>, <Qm> ; T1 NOLINT(whitespace/line_length)
2905888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vaddhn(CurrentCond(),
2905988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
2906088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
2906188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rn),
2906288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rm));
2906388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2906488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2906588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x10000000: {
2906688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xff800400
2906788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2906888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2906988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2907088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2907188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2907288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_3_Decode((instr >> 20) & 0x3);
2907388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2907488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2907588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2907688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2907788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2907888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2907988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 16) & 1) != 0) {
2908088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2908188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2908288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2908388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2908488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 7, 16);
2908588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
2908688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2908788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2908888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2908988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2909088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
29091d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VRADDHN{<c>}{<q>}.<dt> <Dd>, <Qn>, <Qm> ; T1 NOLINT(whitespace/line_length)
2909288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vraddhn(CurrentCond(),
2909388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
2909488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rd),
2909588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rn),
2909688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rm));
2909788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2909888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2909988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2910088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2910188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2910288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
2910388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800500
2910488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2910588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2910688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2910788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2910888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2910988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
2911088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 26) & 0x4));
2911188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2911288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2911388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2911488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2911588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2911688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2911788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2911888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2911988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2912088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2912188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2912288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VABAL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; T1
2912388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vabal(CurrentCond(),
2912488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2912588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2912688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rn),
2912788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2912888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2912988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2913088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
2913188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800600
2913288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x10000000) {
2913388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2913488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800600
2913588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2913688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2913788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2913888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2913988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2914088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_3_Decode((instr >> 20) & 0x3);
2914188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2914288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2914388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2914488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2914588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2914688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2914788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 16) & 1) != 0) {
2914888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2914988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2915088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2915188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2915288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 7, 16);
2915388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
2915488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2915588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2915688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2915788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2915888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
29159d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSUBHN{<c>}{<q>}.<dt> <Dd>, <Qn>, <Qm> ; T1 NOLINT(whitespace/line_length)
2916088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vsubhn(CurrentCond(),
2916188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
2916288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
2916388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rn),
2916488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rm));
2916588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2916688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2916788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x10000000: {
2916888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xff800600
2916988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2917088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2917188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2917288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2917388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2917488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_3_Decode((instr >> 20) & 0x3);
2917588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2917688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2917788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2917888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2917988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2918088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2918188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 16) & 1) != 0) {
2918288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2918388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2918488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2918588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2918688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 7, 16);
2918788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
2918888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2918988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2919088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2919188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2919288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
29193d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VRSUBHN{<c>}{<q>}.<dt> <Dd>, <Qn>, <Qm> ; T1 NOLINT(whitespace/line_length)
2919488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vrsubhn(CurrentCond(),
2919588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
2919688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rd),
2919788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rn),
2919888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rm));
2919988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2920088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2920188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2920288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2920388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2920488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
2920588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800700
2920688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2920788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2920888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2920988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2921088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2921188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
2921288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 26) & 0x4));
2921388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2921488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2921588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2921688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2921788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2921888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2921988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2922088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2922188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2922288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2922388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2922488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VABDL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; T1
2922588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vabdl(CurrentCond(),
2922688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2922788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2922888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rn),
2922988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2923088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2923188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2923288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2923388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2923488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2923588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000440: {
2923688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800440
2923788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000200) {
2923888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2923988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800440
2924088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x10000000) {
2924188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2924288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800440
2924388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2924488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2924588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2924688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2924788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2924888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_9_Decode((instr >> 20) & 0x3,
2924988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 8) & 0x1);
2925088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2925188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2925288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2925388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2925488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2925588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2925688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2925788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 7, 16);
2925888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane;
2925988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2926088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegisterAndLane(instr,
2926188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  dt,
2926288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  5,
2926388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  0,
2926488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  &lane);
29265d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMLS{<c>}{<q>}.<type><size> <Dd>, <Dn>, <Dm[x]> ; T1 NOLINT(whitespace/line_length)
2926688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmls(CurrentCond(),
2926788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
2926888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2926988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rn),
2927088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegisterLane(rm, lane));
2927188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2927288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2927388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x10000000: {
2927488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xff800440
2927588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2927688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2927788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2927888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2927988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2928088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_9_Decode((instr >> 20) & 0x3,
2928188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 8) & 0x1);
2928288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2928388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2928488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2928588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2928688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
2928788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2928888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2928988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2929088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2929188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
2929288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 16) & 1) != 0) {
2929388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2929488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2929588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2929688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2929788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 7, 16);
2929888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane;
2929988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2930088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegisterAndLane(instr,
2930188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  dt,
2930288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  5,
2930388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  0,
2930488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  &lane);
29305d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMLS{<c>}{<q>}.<type><size> <Qd>, <Qn>, <Dm[x]> ; T1 NOLINT(whitespace/line_length)
2930688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmls(CurrentCond(),
2930788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
2930888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
2930988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rn),
2931088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegisterLane(rm, lane));
2931188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2931288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2931388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2931488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2931588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2931688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
2931788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800640
2931888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000100) {
2931988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2932088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800640
2932188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2932288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2932388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2932488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2932588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
2932688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_size_11_Decode((instr >> 20) & 0x3,
2932788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 28) &
2932888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1);
2932988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2933088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2933188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2933288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2933388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
2933488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2933588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2933688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2933788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2933888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
2933988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2934088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 7, 16);
2934188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      int lane;
2934288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
2934388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegisterAndLane(instr,
2934488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  dt,
2934588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  5,
2934688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  0,
2934788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  &lane);
29348d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMLSL{<c>}{<q>}.<type><size> <Qd>, <Dn>, <Dm[x]> ; T1 NOLINT(whitespace/line_length)
2934988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmlsl(CurrentCond(),
2935088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
2935188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
2935288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rn),
2935388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegisterLane(rm, lane));
2935488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2935588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2935688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
2935788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800740
2935888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x10000000) == 0x00000000) {
2935988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x300000) == 0x300000)) {
2936088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2936188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2936288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2936388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt = Dt_size_13_Decode(
2936488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr >> 20) & 0x3);
2936588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
2936688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2936788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2936888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2936988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
2937088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2937188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2937288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2937388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
2937488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
2937588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rn =
2937688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 7, 16);
2937788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t mvm = (instr & 0xf) |
2937888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 1) & 0x10);
2937988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t shift = 4;
2938088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(S16)) {
2938188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          shift = 3;
2938288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2938388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t vm = mvm & ((1 << shift) - 1);
2938488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t index = mvm >> shift;
29385d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VQDMLSL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm>[<index>] ; T2 NOLINT(whitespace/line_length)
2938688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vqdmlsl(CurrentCond(),
2938788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
2938888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rd),
2938988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rn),
2939088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(vm),
2939188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                index);
2939288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
2939388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2939488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2939588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2939688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2939788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2939888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2939988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2940088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2940188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2940288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2940388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000800: {
2940488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800800
2940588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000300) {
2940688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2940788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800800
2940888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2940988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2941088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2941188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2941288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2941388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_12_Decode((instr >> 20) & 0x3,
2941488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 28) & 0x1);
2941588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2941688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2941788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2941888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2941988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2942088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2942188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2942288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2942388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2942488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2942588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
29426d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VMLAL{<c>}{<q>}.<type><size> <Qd>, <Dn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2942788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vmlal(CurrentCond(),
2942888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2942988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2943088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rn),
2943188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2943288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2943388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2943488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
2943588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800900
2943688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x10000000) == 0x00000000) {
2943788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x300000) == 0x300000)) {
2943888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2943988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2944088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2944188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
2944288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_13_Decode((instr >> 20) & 0x3);
2944388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
2944488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2944588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2944688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2944788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
2944888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2944988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2945088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2945188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2945288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
2945388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rn =
2945488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 7, 16);
2945588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
29456d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQDMLAL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2945788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqdmlal(CurrentCond(),
2945888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
2945988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
2946088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rn),
2946188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2946288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2946388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2946488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2946588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2946688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2946788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
2946888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800a00
2946988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2947088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2947188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2947288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2947388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2947488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_12_Decode((instr >> 20) & 0x3,
2947588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 28) & 0x1);
2947688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2947788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2947888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2947988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2948088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2948188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2948288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2948388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2948488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2948588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2948688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
29487d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VMLSL{<c>}{<q>}.<type><size> <Qd>, <Dn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2948888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vmlsl(CurrentCond(),
2948988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2949088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2949188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rn),
2949288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2949388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2949488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2949588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
2949688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800b00
2949788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x10000000) == 0x00000000) {
2949888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x300000) == 0x300000)) {
2949988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2950088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2950188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2950288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
2950388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_13_Decode((instr >> 20) & 0x3);
2950488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
2950588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2950688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2950788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2950888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
2950988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2951088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2951188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2951288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2951388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
2951488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rn =
2951588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 7, 16);
2951688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
29517d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQDMLSL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2951888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqdmlsl(CurrentCond(),
2951988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
2952088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
2952188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rn),
2952288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2952388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2952488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2952588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2952688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2952788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2952888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2952988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2953088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2953188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000840: {
2953288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800840
2953388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000200) {
2953488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2953588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800840
2953688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x10000000) {
2953788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2953888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800840
2953988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2954088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2954188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2954288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2954388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt = Dt_F_size_3_Decode(
2954488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 20) & 0x3) |
2954588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 6) & 0x4));
2954688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2954788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2954888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2954988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2955088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2955188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
2955288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2955388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 7, 16);
2955488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t mvm =
2955588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (instr & 0xf) | ((instr >> 1) & 0x10);
2955688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t shift = 4;
2955788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(I16)) {
2955888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift = 3;
2955988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2956088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t vm = mvm & ((1 << shift) - 1);
2956188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t index = mvm >> shift;
29562d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMUL{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm>[<index>] ; T1 NOLINT(whitespace/line_length)
2956388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmul(CurrentCond(),
2956488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
2956588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2956688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rn),
2956788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(vm),
2956888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           index);
2956988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2957088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2957188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x10000000: {
2957288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xff800840
2957388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2957488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2957588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2957688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2957788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt = Dt_F_size_3_Decode(
2957888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 20) & 0x3) |
2957988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 6) & 0x4));
2958088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2958188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2958288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2958388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2958488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
2958588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2958688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2958788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2958888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2958988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
2959088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 16) & 1) != 0) {
2959188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2959288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2959388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2959488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2959588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 7, 16);
2959688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t mvm =
2959788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (instr & 0xf) | ((instr >> 1) & 0x10);
2959888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t shift = 4;
2959988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(I16)) {
2960088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift = 3;
2960188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2960288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t vm = mvm & ((1 << shift) - 1);
2960388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t index = mvm >> shift;
29604d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMUL{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm>[<index>] ; T1 NOLINT(whitespace/line_length)
2960588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmul(CurrentCond(),
2960688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
2960788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
2960888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rn),
2960988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(vm),
2961088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           index);
2961188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2961288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2961388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2961488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2961588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2961688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
2961788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800a40
2961888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000100) {
2961988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
2962088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800a40
2962188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x300000) == 0x300000)) {
2962288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2962388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2962488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2962588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt = Dt_U_size_2_Decode(
2962688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 20) & 0x3) |
2962788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 26) & 0x4));
2962888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
2962988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2963088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2963188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2963288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
2963388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2963488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
2963588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2963688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
2963788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
2963888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rn =
2963988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 7, 16);
2964088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t mvm =
2964188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (instr & 0xf) | ((instr >> 1) & 0x10);
2964288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t shift = 4;
2964388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(S16) || dt.Is(U16)) {
2964488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift = 3;
2964588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2964688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t vm = mvm & ((1 << shift) - 1);
2964788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t index = mvm >> shift;
29648d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VMULL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm>[<index>] ; T1 NOLINT(whitespace/line_length)
2964988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vmull(CurrentCond(),
2965088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
2965188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
2965288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rn),
2965388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(vm),
2965488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            index);
2965588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2965688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2965788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
2965888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800b40
2965988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 0x10000000) == 0x00000000) {
2966088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x300000) == 0x300000)) {
2966188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2966288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2966388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2966488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt = Dt_size_13_Decode(
2966588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr >> 20) & 0x3);
2966688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
2966788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2966888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2966988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2967088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
2967188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedT32(instr);
2967288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
2967388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
2967488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
2967588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
2967688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rn =
2967788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 7, 16);
2967888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        int lane;
2967988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
2968088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegisterAndLane(instr,
2968188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    dt,
2968288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    5,
2968388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0,
2968488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    &lane);
29685d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VQDMULL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm[x]> ; T2 NOLINT(whitespace/line_length)
2968688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vqdmull(CurrentCond(),
2968788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
2968888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rd),
2968988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rn),
2969088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegisterLane(rm, lane));
2969188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      } else {
2969288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
2969388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
2969488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
2969588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2969688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2969788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2969888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2969988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2970088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2970188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2970288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c00: {
2970388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800c00
2970488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000100) {
2970588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2970688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800c00
2970788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2970888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2970988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2971088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2971188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt = Dt_op_U_size_1_Decode(
2971288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr >> 20) & 0x3) |
2971388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr >> 26) & 0x4) |
2971488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      ((instr >> 6) & 0x8));
2971588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2971688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2971788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2971888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2971988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2972088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2972188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2972288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2972388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2972488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2972588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
2972688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VMULL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; T1
2972788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vmull(CurrentCond(),
2972888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
2972988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
2973088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rn),
2973188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm));
2973288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2973388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2973488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
2973588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800d00
2973688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x10000200) == 0x00000000) {
2973788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x300000) == 0x300000)) {
2973888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2973988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2974088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2974188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
2974288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_13_Decode((instr >> 20) & 0x3);
2974388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
2974488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2974588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2974688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2974788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
2974888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
2974988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
2975088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
2975188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
2975288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
2975388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rn =
2975488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 7, 16);
2975588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
29756d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQDMULL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; T1 NOLINT(whitespace/line_length)
2975788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqdmull(CurrentCond(),
2975888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
2975988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
2976088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rn),
2976188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
2976288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
2976388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2976488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2976588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2976688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2976788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2976888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2976988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2977088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000c40: {
2977188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800c40
2977288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x10000300) {
2977388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
2977488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800c40
2977588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2977688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2977788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2977888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2977988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2978088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_13_Decode((instr >> 20) & 0x3);
2978188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2978288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2978388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2978488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2978588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
2978688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2978788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane;
2978888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegisterAndLane(instr,
2978988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        dt,
2979088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        5,
2979188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        0,
2979288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        &lane);
29793d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VQDMULH{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm[x]> ; T2 NOLINT(whitespace/line_length)
2979488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vqdmulh(CurrentCond(),
2979588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          dt,
2979688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
2979788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rn),
2979888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegisterLane(rm, lane));
2979988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2980088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2980188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
2980288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800d40
2980388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2980488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2980588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2980688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2980788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2980888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_13_Decode((instr >> 20) & 0x3);
2980988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2981088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2981188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2981288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2981388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
2981488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractDRegister(instr, 7, 16);
2981588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane;
2981688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegisterAndLane(instr,
2981788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        dt,
2981888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        5,
2981988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        0,
2982088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        &lane);
29821d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VQRDMULH{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm[x]> ; T2 NOLINT(whitespace/line_length)
2982288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vqrdmulh(CurrentCond(),
2982388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
2982488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
2982588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rn),
2982688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegisterLane(rm, lane));
2982788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2982888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2982988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x10000000: {
2983088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xff800c40
2983188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2983288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2983388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2983488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2983588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2983688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_13_Decode((instr >> 20) & 0x3);
2983788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2983888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2983988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2984088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2984188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2984288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2984388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2984488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2984588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2984688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 16) & 1) != 0) {
2984788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2984888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2984988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2985088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractQRegister(instr, 7, 16);
2985188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane;
2985288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegisterAndLane(instr,
2985388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        dt,
2985488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        5,
2985588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        0,
2985688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        &lane);
29857d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VQDMULH{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm[x]> ; T2 NOLINT(whitespace/line_length)
2985888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vqdmulh(CurrentCond(),
2985988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          dt,
2986088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rd),
2986188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rn),
2986288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegisterLane(rm, lane));
2986388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2986488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
2986588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x10000100: {
2986688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xff800d40
2986788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x300000) == 0x300000)) {
2986888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2986988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2987088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2987188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
2987288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_13_Decode((instr >> 20) & 0x3);
2987388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
2987488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2987588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2987688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2987788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
2987888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2987988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2988088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2988188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
2988288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 16) & 1) != 0) {
2988388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
2988488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
2988588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
2988688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rn = ExtractQRegister(instr, 7, 16);
2988788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  int lane;
2988888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegisterAndLane(instr,
2988988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        dt,
2989088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        5,
2989188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        0,
2989288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        &lane);
29893d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VQRDMULH{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm[x]> ; T2 NOLINT(whitespace/line_length)
2989488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vqrdmulh(CurrentCond(),
2989588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
2989688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
2989788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rn),
2989888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegisterLane(rm, lane));
2989988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2990088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
299014339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                default:
2990288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
2990388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
2990488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2990588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2990688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2990788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2990888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2990988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2991088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
2991188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
2991288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
2991388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
2991488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
2991588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
2991688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                case 0x01000010: {
2991788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // 0xef000010
2991888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  switch (instr & 0x00800040) {
2991988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000000: {
2992088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xef000010
2992188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
2992288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
2992388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000010
2992488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
2992588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
2992688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
2992788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
2992888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
2992988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
2993088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
2993188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
2993288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
2993388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
2993488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqadd(CurrentCond(),
2993588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
2993688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
2993788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn),
2993888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rm));
2993988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
2994088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
2994188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000100: {
2994288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000110
2994388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
2994488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
2994588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000110
2994688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2994788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2994888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2994988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VAND{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; T1
2995088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vand(CurrentCond(),
2995188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
2995288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2995388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2995488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2995588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2995688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2995788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100000: {
2995888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef100110
2995988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2996088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2996188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2996288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VBIC{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; T1
2996388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vbic(CurrentCond(),
2996488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
2996588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2996688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2996788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2996888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2996988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2997088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
2997188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200110
2997288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x00000040) == 0x00000000) &&
2997388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((((Uint32((instr >> 7)) & Uint32(0x1))
2997488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     << 4) |
2997588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (Uint32((instr >> 16)) & Uint32(0xf))) ==
2997688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (((Uint32((instr >> 5)) & Uint32(0x1))
2997788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     << 4) |
2997888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (Uint32(instr) & Uint32(0xf))))) {
2997988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
2998088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 7, 16);
2998188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VMOV{<c>}{<q>}{.<dt>} <Dd>, <Dm> ; T1
2998288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vmov(CurrentCond(),
2998388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     kDataTypeValueNone,
2998488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
2998588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
2998688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
2998788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
2998888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
2998988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
2999088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
2999188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VORR{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; T1
2999288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vorr(CurrentCond(),
2999388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
2999488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
2999588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
2999688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
2999788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
2999888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
2999988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300000: {
3000088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef300110
3000188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3000288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3000388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3000488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VORN{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; T1
3000588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vorn(CurrentCond(),
3000688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3000788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3000888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3000988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3001088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3001188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3001288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3001388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000110
3001488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3001588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3001688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3001788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VEOR{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; T1
3001888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              veor(CurrentCond(),
3001988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3002088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3002188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3002288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3002388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3002488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3002588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10100000: {
3002688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff100110
3002788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3002888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3002988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3003088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VBSL{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; T1
3003188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vbsl(CurrentCond(),
3003288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3003388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3003488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3003588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3003688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3003788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3003888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
3003988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200110
3004088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3004188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3004288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3004388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VBIT{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; T1
3004488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vbit(CurrentCond(),
3004588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3004688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3004788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3004888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3004988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3005088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3005188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10300000: {
3005288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff300110
3005388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3005488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3005588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3005688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VBIF{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; T1
3005788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vbif(CurrentCond(),
3005888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3005988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3006088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3006188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3006288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3006388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3006488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3006588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3006688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3006788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000200: {
3006888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000210
3006988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
3007088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3007188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3007288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3007388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3007488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3007588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
3007688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
3007788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
3007888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQSUB{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
3007988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqsub(CurrentCond(),
3008088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
3008188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
3008288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn),
3008388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rm));
3008488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3008588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3008688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000300: {
3008788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000310
3008888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
3008988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3009088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3009188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3009288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3009388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3009488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
3009588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
3009688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
3009788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VCGE{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
3009888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vcge(CurrentCond(),
3009988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
3010088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rd),
3010188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rn),
3010288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rm));
3010388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3010488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3010588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000400: {
3010688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000410
3010788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
3010888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3010988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3011088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3011188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3011288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3011388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
3011488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
3011588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
3011688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQSHL{<c>}{<q>}.<dt> {<Dd>}, <Dm>, <Dn> ; T1
3011788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqshl(CurrentCond(),
3011888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
3011988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
3012088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rm),
3012188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn));
3012288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3012388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3012488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000500: {
3012588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000510
3012688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
3012788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3012888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3012988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3013088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3013188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3013288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
3013388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
3013488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
3013588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQRSHL{<c>}{<q>}.<dt> {<Dd>}, <Dm>, <Dn> ; T1
3013688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqrshl(CurrentCond(),
3013788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
3013888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
3013988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rm),
3014088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rn));
3014188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3014288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3014388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000600: {
3014488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000610
3014588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
3014688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3014788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3014888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3014988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3015088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3015188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
3015288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
3015388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
3015488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VMIN{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
3015588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vmin(CurrentCond(),
3015688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
3015788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rd),
3015888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rn),
3015988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rm));
3016088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3016188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3016288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000700: {
3016388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000710
3016488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
3016588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3016688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3016788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3016888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3016988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3017088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
3017188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
3017288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
3017388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VABA{<c>}{<q>}.<dt> <Dd>, <Dn>, <Dm> ; T1
3017488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vaba(CurrentCond(),
3017588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
3017688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rd),
3017788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rn),
3017888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rm));
3017988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3018088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3018188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000800: {
3018288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000810
3018388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
3018488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3018588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000810
3018688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
3018788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 20) & 0x3);
3018888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
3018988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3019088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3019188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3019288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3019388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3019488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3019588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VTST{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
3019688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vtst(CurrentCond(),
3019788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
3019888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3019988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3020088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3020188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3020288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3020388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3020488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000810
3020588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
3020688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_4_Decode((instr >> 20) & 0x3);
3020788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
3020888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3020988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3021088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3021188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3021288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3021388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3021488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VCEQ{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
3021588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vceq(CurrentCond(),
3021688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
3021788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3021888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3021988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3022088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3022188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3022288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3022388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3022488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3022588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000900: {
3022688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000910
3022788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_op_size_1_Decode(
3022888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3022988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3023088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3023188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3023288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3023388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
3023488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
3023588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
3023688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VMUL{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
3023788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vmul(CurrentCond(),
3023888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
3023988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rd),
3024088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rn),
3024188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               DRegister(rm));
3024288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3024388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3024488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000a00: {
3024588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000a10
3024688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
3024788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3024888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3024988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3025088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3025188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3025288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
3025388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
3025488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
3025588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VPMIN{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
3025688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vpmin(CurrentCond(),
3025788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
3025888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
3025988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn),
3026088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rm));
3026188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3026288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3026388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000b00: {
3026488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000b10
3026588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 0x10000000) == 0x00000000) {
3026688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_4_Decode((instr >> 20) & 0x3);
3026788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
3026888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3026988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
3027088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3027188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
3027288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractDRegister(instr, 7, 16);
3027388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
3027488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VPADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; T1
3027588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vpadd(CurrentCond(),
3027688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  dt,
3027788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rd),
3027888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rn),
3027988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rm));
3028088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          } else {
3028188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3028288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3028388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3028488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3028588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000c00: {
3028688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000c10
3028788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3028888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3028988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000c10
3029088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3029188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3029288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3029388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFMA{<c>}{<q>}.F32 <Dd>, <Dn>, <Dm> ; T1
3029488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfma(CurrentCond(),
3029588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3029688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3029788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3029888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3029988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3030088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3030188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
3030288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200c10
3030388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3030488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3030588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3030688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFMS{<c>}{<q>}.F32 <Dd>, <Dn>, <Dm> ; T1
3030788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfms(CurrentCond(),
3030888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3030988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3031088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3031188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3031288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3031388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
303144339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3031588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3031688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3031788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3031888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3031988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3032088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000d00: {
3032188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000d10
3032288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3032388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3032488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000d10
3032588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3032688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3032788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3032888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMLA{<c>}{<q>}.F32 <Dd>, <Dn>, <Dm> ; T1
3032988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmla(CurrentCond(),
3033088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3033188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3033288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3033388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3033488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3033588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3033688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
3033788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200d10
3033888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3033988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3034088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3034188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMLS{<c>}{<q>}.F32 <Dd>, <Dn>, <Dm> ; T1
3034288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmls(CurrentCond(),
3034388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3034488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3034588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3034688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3034788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3034888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3034988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3035088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000d10
3035188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3035288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3035388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3035488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMUL{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
3035588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmul(CurrentCond(),
3035688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3035788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
3035888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rn),
3035988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm));
3036088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3036188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
303624339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3036388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3036488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3036588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3036688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3036788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3036888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000e00: {
3036988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000e10
3037088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3037188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3037288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000e10
3037388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3037488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3037588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3037688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VACGE{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
3037788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vacge(CurrentCond(),
3037888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
3037988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
3038088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
3038188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
3038288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3038388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3038488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
3038588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200e10
3038688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3038788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3038888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3038988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VACGT{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
3039088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vacgt(CurrentCond(),
3039188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
3039288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
3039388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rn),
3039488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rm));
3039588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3039688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
303974339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3039888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3039988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3040088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3040188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3040288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3040388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
3040488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000f10
3040588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3040688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3040788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000f10
3040888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3040988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3041088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3041188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VRECPS{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
3041288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vrecps(CurrentCond(),
3041388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
3041488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
3041588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
3041688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
3041788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3041888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3041988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
3042088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200f10
3042188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3042288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3042388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3042488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VRSQRTS{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; T1
3042588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vrsqrts(CurrentCond(),
3042688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
3042788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rd),
3042888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rn),
3042988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm));
3043088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3043188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3043288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3043388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000f10
3043488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3043588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3043688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3043788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMAXNM{<q>}.F32 <Dd>, <Dn>, <Dm> ; T1
3043888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmaxnm(F32,
3043988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
3044088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
3044188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
3044288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3044388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3044488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
3044588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200f10
3044688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
3044788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
3044888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
3044988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMINNM{<q>}.F32 <Dd>, <Dn>, <Dm> ; T1
3045088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vminnm(F32,
3045188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
3045288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rn),
3045388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
3045488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3045588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
304564339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3045788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3045888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3045988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3046088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3046188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3046288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3046388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
3046488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3046588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00000040: {
3046688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xef000050
3046788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000f00) {
3046888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
3046988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000050
3047088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
3047188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3047288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3047388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3047488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3047588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3047688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
3047788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3047888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3047988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3048088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
3048188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
3048288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3048388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3048488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3048588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
3048688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
3048788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3048888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3048988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3049088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
3049188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQADD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
3049288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqadd(CurrentCond(),
3049388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
3049488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rd),
3049588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rn),
3049688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rm));
3049788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3049888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3049988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000100: {
3050088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000150
3050188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3050288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3050388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000150
3050488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3050588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3050688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3050788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3050888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3050988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3051088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3051188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3051288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3051388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3051488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3051588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3051688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3051788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3051888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3051988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VAND{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; T1
3052088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vand(CurrentCond(),
3052188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3052288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3052388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3052488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3052588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3052688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3052788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00100000: {
3052888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef100150
3052988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3053088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3053188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3053288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3053388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3053488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3053588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3053688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3053788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3053888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3053988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3054088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3054188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3054288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3054388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3054488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VBIC{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; T1
3054588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vbic(CurrentCond(),
3054688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3054788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3054888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3054988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3055088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3055188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3055288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
3055388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200150
3055488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x00000040) == 0x00000040) &&
3055588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((((Uint32((instr >> 7)) & Uint32(0x1))
3055688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     << 4) |
3055788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (Uint32((instr >> 16)) & Uint32(0xf))) ==
3055888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   (((Uint32((instr >> 5)) & Uint32(0x1))
3055988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     << 4) |
3056088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (Uint32(instr) & Uint32(0xf))))) {
3056188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
3056288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
3056388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
3056488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3056588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
3056688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 16) & 1) != 0) {
3056788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedT32(instr);
3056888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
3056988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3057088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 7, 16);
3057188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VMOV{<c>}{<q>}{.<dt>} <Qd>, <Qm> ; T1
3057288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vmov(CurrentCond(),
3057388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     kDataTypeValueNone,
3057488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
3057588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm));
3057688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3057788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3057888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3057988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3058088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3058188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3058288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3058388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3058488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3058588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3058688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3058788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3058888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3058988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3059088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3059188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3059288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3059388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VORR{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; T1
3059488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vorr(CurrentCond(),
3059588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3059688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3059788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3059888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3059988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3060088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3060188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00300000: {
3060288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef300150
3060388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3060488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3060588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3060688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3060788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3060888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3060988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3061088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3061188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3061288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3061388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3061488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3061588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3061688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3061788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3061888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VORN{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; T1
3061988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vorn(CurrentCond(),
3062088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3062188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3062288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3062388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3062488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3062588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3062688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3062788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000150
3062888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3062988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3063088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3063188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3063288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3063388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3063488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3063588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3063688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3063788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3063888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3063988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3064088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3064188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3064288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3064388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VEOR{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; T1
3064488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              veor(CurrentCond(),
3064588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3064688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3064788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3064888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3064988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3065088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3065188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10100000: {
3065288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff100150
3065388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3065488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3065588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3065688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3065788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3065888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3065988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3066088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3066188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3066288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3066388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3066488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3066588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3066688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3066788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3066888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VBSL{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; T1
3066988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vbsl(CurrentCond(),
3067088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3067188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3067288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3067388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3067488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3067588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3067688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
3067788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200150
3067888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3067988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3068088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3068188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3068288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3068388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3068488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3068588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3068688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3068788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3068888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3068988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3069088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3069188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3069288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3069388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VBIT{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; T1
3069488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vbit(CurrentCond(),
3069588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3069688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3069788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3069888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3069988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3070088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3070188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10300000: {
3070288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff300150
3070388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3070488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3070588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3070688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3070788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3070888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3070988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3071088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3071188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3071288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3071388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3071488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3071588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3071688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3071788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3071888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VBIF{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; T1
3071988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vbif(CurrentCond(),
3072088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
3072188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3072288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3072388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3072488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3072588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3072688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3072788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3072888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3072988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000200: {
3073088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000250
3073188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
3073288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3073388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3073488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3073588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3073688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3073788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
3073888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3073988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3074088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3074188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
3074288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
3074388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3074488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3074588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3074688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
3074788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
3074888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3074988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3075088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3075188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
3075288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQSUB{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
3075388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqsub(CurrentCond(),
3075488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
3075588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rd),
3075688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rn),
3075788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rm));
3075888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3075988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3076088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000300: {
3076188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000350
3076288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
3076388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3076488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3076588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3076688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3076788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3076888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
3076988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3077088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3077188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3077288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
3077388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
3077488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3077588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3077688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3077788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
3077888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
3077988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3078088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3078188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3078288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
3078388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VCGE{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
3078488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vcge(CurrentCond(),
3078588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
3078688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rd),
3078788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rn),
3078888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rm));
3078988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3079088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3079188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000400: {
3079288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000450
3079388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
3079488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3079588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3079688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3079788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3079888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3079988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
3080088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3080188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3080288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3080388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
3080488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
3080588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3080688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3080788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3080888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
3080988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
3081088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3081188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3081288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3081388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
3081488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQSHL{<c>}{<q>}.<dt> {<Qd>}, <Qm>, <Qn> ; T1
3081588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqshl(CurrentCond(),
3081688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
3081788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rd),
3081888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rm),
3081988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rn));
3082088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3082188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3082288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000500: {
3082388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000550
3082488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_3_Decode(
3082588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3082688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3082788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3082888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3082988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3083088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
3083188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3083288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3083388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3083488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
3083588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
3083688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3083788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3083888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3083988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
3084088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
3084188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3084288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3084388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3084488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
3084588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQRSHL{<c>}{<q>}.<dt> {<Qd>}, <Qm>, <Qn> ; T1
3084688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqrshl(CurrentCond(),
3084788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
3084888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rd),
3084988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rm),
3085088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rn));
3085188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3085288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3085388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000600: {
3085488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000650
3085588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
3085688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3085788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3085888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3085988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3086088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3086188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
3086288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3086388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3086488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3086588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
3086688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
3086788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3086888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3086988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3087088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
3087188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
3087288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3087388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3087488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3087588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
3087688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VMIN{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
3087788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vmin(CurrentCond(),
3087888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
3087988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rd),
3088088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rn),
3088188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rm));
3088288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3088388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3088488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000700: {
3088588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000750
3088688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_U_size_1_Decode(
3088788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3088888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3088988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3089088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3089188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3089288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
3089388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3089488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3089588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3089688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
3089788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
3089888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3089988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3090088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3090188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
3090288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
3090388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3090488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3090588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3090688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
3090788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VABA{<c>}{<q>}.<dt> <Qd>, <Qn>, <Qm> ; T1
3090888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vaba(CurrentCond(),
3090988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
3091088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rd),
3091188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rn),
3091288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rm));
3091388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3091488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3091588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000800: {
3091688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000850
3091788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10000000) {
3091888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3091988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000850
3092088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
3092188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_7_Decode((instr >> 20) & 0x3);
3092288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
3092388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3092488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3092588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3092688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3092788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3092888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3092988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3093088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3093188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3093288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3093388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3093488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3093588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3093688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3093788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3093888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3093988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3094088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3094188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VTST{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
3094288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vtst(CurrentCond(),
3094388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
3094488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3094588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3094688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3094788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3094888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3094988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3095088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000850
3095188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
3095288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_4_Decode((instr >> 20) & 0x3);
3095388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
3095488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3095588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3095688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3095788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3095888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3095988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3096088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3096188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3096288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3096388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3096488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3096588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3096688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3096788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3096888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3096988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3097088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3097188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3097288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VCEQ{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
3097388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vceq(CurrentCond(),
3097488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
3097588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3097688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3097788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3097888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3097988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3098088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3098188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3098288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3098388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000900: {
3098488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000950
3098588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_op_size_1_Decode(
3098688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr >> 20) & 0x3) | ((instr >> 26) & 0x4));
3098788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
3098888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3098988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3099088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3099188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
3099288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3099388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3099488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3099588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
3099688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 16) & 1) != 0) {
3099788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3099888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3099988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractQRegister(instr, 7, 16);
3100188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((instr & 1) != 0) {
3100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedT32(instr);
3100388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
3100488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractQRegister(instr, 5, 0);
3100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VMUL{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; T1
3100788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vmul(CurrentCond(),
3100888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               dt,
3100988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rd),
3101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rn),
3101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               QRegister(rm));
3101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3101488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000c00: {
3101588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000c50
3101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3101888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000c50
3101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3102188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3102288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3102588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3102888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3102988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3103088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3103188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3103288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3103388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3103488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFMA{<c>}{<q>}.F32 <Qd>, <Qn>, <Qm> ; T1
3103588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfma(CurrentCond(),
3103688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3103788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3103888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3103988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3104088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3104188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
3104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200c50
3104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3104688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3104788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3105388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3105488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3105588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3105988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VFMS{<c>}{<q>}.F32 <Qd>, <Qn>, <Qm> ; T1
3106088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vfms(CurrentCond(),
3106188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3106488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3106688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
310674339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3106888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3106988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3107088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3107188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3107288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3107388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000d00: {
3107488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000d50
3107588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3107688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3107788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000d50
3107888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3107988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3108388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3108488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3108588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3108888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMLA{<c>}{<q>}.F32 <Qd>, <Qn>, <Qm> ; T1
3109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmla(CurrentCond(),
3109588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3109688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3109988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3110088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3110188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
3110288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200d50
3110388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3110488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3110588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3110688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3110788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3110888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3110988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3111088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3111188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3111288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3111388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3111488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3111588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3111688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3111788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3111888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMLS{<c>}{<q>}.F32 <Qd>, <Qn>, <Qm> ; T1
3111988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmls(CurrentCond(),
3112088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3112188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3112288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3112388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3112488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3112588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3112688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3112788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000d50
3112888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3113188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3113288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3113388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3113588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3113688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3113788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3113988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3114188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMUL{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
3114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmul(CurrentCond(),
3114588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
3114688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
3114788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
3114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
3114988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3115088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
311514339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3115288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3115388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3115488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3115588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3115688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000e00: {
3115888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000e50
3115988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3116088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3116188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000e50
3116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3116588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3116988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3117088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3117188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3117388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3117588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VACGE{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
3117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vacge(CurrentCond(),
3117988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
3118088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rd),
3118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rn),
3118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rm));
3118388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3118488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3118588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
3118688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200e50
3118788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3118888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3118988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3119088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3119188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3119288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3119388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3119488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3119588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3119688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3119788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3119888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3119988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3120088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3120188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3120288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VACGT{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
3120388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vacgt(CurrentCond(),
3120488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    F32,
3120588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rd),
3120688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rn),
3120788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rm));
3120888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3120988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
312104339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3121188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3121288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3121388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3121488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3121588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3121688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000f00: {
3121788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef000f50
3121888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x10300000) {
3121988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3122088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef000f50
3122188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3122288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3122388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3122488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3122588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3122688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3122788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3122888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3122988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3123088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3123188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3123288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3123388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3123488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3123588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3123688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VRECPS{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
3123788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vrecps(CurrentCond(),
3123888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
3123988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
3124088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rn),
3124188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm));
3124288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3124388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3124488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00200000: {
3124588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef200f50
3124688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3124788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3124888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3124988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3125088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3125188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3125288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3125388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3125488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3125588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3125688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3125788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3125888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3125988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3126088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3126188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VRSQRTS{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; T1
3126288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vrsqrts(CurrentCond(),
3126388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
3126488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
3126588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rn),
3126688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rm));
3126788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3126888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3126988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10000000: {
3127088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff000f50
3127188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3127288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3127388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3127488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3127588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3127688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3127788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3127888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3127988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3128088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3128188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3128288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3128388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3128488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3128588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3128688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMAXNM{<q>}.F32 <Qd>, <Qn>, <Qm> ; T1
3128788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmaxnm(F32,
3128888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
3128988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rn),
3129088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm));
3129188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3129288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3129388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x10200000: {
3129488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xff200f50
3129588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
3129688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3129788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3129888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3129988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
3130088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 16) & 1) != 0) {
3130188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3130288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3130388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3130488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractQRegister(instr, 7, 16);
3130588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
3130688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedT32(instr);
3130788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
3130888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3130988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
3131088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMINNM{<q>}.F32 <Qd>, <Qn>, <Qm> ; T1
3131188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vminnm(F32,
3131288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
3131388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rn),
3131488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm));
3131588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3131688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
313174339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3131888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3131988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3132088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3132188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3132288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
313234339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                        default:
3132488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedT32(instr);
3132588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3132688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3132788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
3132888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3132988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00800000: {
3133088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xef800010
3133188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000c00) {
3133288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
3133388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef800010
3133488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00380080) {
3133588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3133688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800010
3133788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000100) {
3133888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3133988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800010
3134088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000200) {
3134188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default: {
3134288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000020) {
3134388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000020: {
3134488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800030
3134588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xd00) == 0x100) ||
3134688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xd00) == 0x500) ||
3134788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xd00) == 0x900) ||
3134888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xe00) == 0xe00)) {
3134988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3135088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3135188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3135288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode = (instr >> 8) & 0xf;
3135388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3135488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmvn::DecodeDt(cmode);
3135588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3135688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3135788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3135888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3135988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3136088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3136188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DOperand imm =
3136288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmvn::DecodeImmediate(
3136388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3136488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3136588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3136688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
31367d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3136888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmvn(CurrentCond(),
3136988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3137088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3137188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3137288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3137388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3137488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3137588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x920) == 0x100) ||
3137688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x520) == 0x100) ||
3137788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x820) == 0x20) ||
3137888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x420) == 0x20) ||
3137988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x220) == 0x20) ||
3138088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x120) == 0x120)) {
3138188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3138288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3138388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3138488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode =
3138588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0xf) |
3138688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 1) & 0x10);
3138788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3138888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeDt(cmode);
3138988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3139088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3139188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3139288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3139388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3139488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3139588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DOperand imm =
3139688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeImmediate(
3139788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3139888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3139988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3140088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
31401d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3140288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmov(CurrentCond(),
3140388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3140488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3140588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3140688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3140788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3140888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3140988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3141088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3141188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3141288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3141388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3141488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
3141588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800110
3141688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000020) {
3141788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3141888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800110
3141988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x100) == 0x0) ||
3142088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc00) == 0xc00)) {
3142188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3142288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3142388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3142488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned cmode = (instr >> 8) & 0xf;
3142588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3142688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVorr::DecodeDt(cmode);
3142788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3142888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3142988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3143088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3143188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3143288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3143388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DOperand imm =
3143488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVorr::DecodeImmediate(
3143588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              cmode,
3143688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr & 0xf) |
3143788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 12) & 0x70) |
3143888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 21) & 0x80));
31439d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VORR{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3144088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vorr(CurrentCond(),
3144188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3144288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3144388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3144488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3144588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3144688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3144788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000020: {
3144888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800130
3144988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x100) == 0x0) ||
3145088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc00) == 0xc00)) {
3145188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3145288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3145388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3145488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned cmode = (instr >> 8) & 0xf;
3145588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3145688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVbic::DecodeDt(cmode);
3145788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3145888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3145988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3146088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3146188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3146288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3146388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DOperand imm =
3146488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVbic::DecodeImmediate(
3146588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              cmode,
3146688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr & 0xf) |
3146788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 12) & 0x70) |
3146888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 21) & 0x80));
31469d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VBIC{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3147088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vbic(CurrentCond(),
3147188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3147288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3147388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3147488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3147588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3147688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3147788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3147888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3147988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3148088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3148188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3148288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3148388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
3148488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000300) {
3148588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3148688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800010
3148788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3148888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3148988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3149088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3149188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3149288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3149388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3149488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3149588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3149688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3149788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3149888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3149988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3150088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
3150188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
3150288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3150388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3150488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (dt.IsSize(64) ? 64
3150588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     : (dt.GetSize() * 2)) -
3150688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6;
31507d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VSHR{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3150888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vshr(CurrentCond(),
3150988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
3151088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
3151188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm),
3151288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
3151388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3151488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3151588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
3151688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800110
3151788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3151888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3151988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3152088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3152188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3152288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3152388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3152488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3152588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3152688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3152788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3152888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3152988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3153088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
3153188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
3153288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3153388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3153488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (dt.IsSize(64) ? 64
3153588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     : (dt.GetSize() * 2)) -
3153688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6;
31537d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VSRA{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3153888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vsra(CurrentCond(),
3153988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
3154088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
3154188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm),
3154288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
3154388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3154488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3154588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
3154688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800210
3154788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3154888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3154988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3155088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3155188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3155288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3155388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3155488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3155588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3155688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3155788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3155888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3155988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3156088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
3156188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
3156288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3156388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3156488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (dt.IsSize(64) ? 64
3156588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     : (dt.GetSize() * 2)) -
3156688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6;
31567d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VRSHR{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3156888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrshr(CurrentCond(),
3156988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
3157088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rd),
3157188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm),
3157288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm);
3157388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3157488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3157588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
3157688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800310
3157788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3157888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3157988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3158088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3158188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3158288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3158388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3158488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3158588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3158688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3158788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3158888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3158988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3159088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
3159188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
3159288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3159388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3159488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (dt.IsSize(64) ? 64
3159588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     : (dt.GetSize() * 2)) -
3159688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6;
31597d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VRSRA{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3159888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrsra(CurrentCond(),
3159988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
3160088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rd),
3160188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm),
3160288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm);
3160388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3160488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3160588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3160688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3160788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3160888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3160988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3161088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3161188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000400: {
3161288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef800410
3161388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00380080) {
3161488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3161588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800410
3161688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000100) {
3161788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3161888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800410
3161988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000200) {
3162088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default: {
3162188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000020) {
3162288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000020: {
3162388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800430
3162488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xd00) == 0x100) ||
3162588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xd00) == 0x500) ||
3162688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xd00) == 0x900) ||
3162788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xe00) == 0xe00)) {
3162888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3162988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3163088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3163188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode = (instr >> 8) & 0xf;
3163288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3163388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmvn::DecodeDt(cmode);
3163488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3163588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3163688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3163788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3163888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3163988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3164088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DOperand imm =
3164188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmvn::DecodeImmediate(
3164288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3164388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3164488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3164588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
31646d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3164788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmvn(CurrentCond(),
3164888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3164988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3165088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3165188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3165288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3165388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3165488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x920) == 0x100) ||
3165588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x520) == 0x100) ||
3165688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x820) == 0x20) ||
3165788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x420) == 0x20) ||
3165888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x220) == 0x20) ||
3165988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x120) == 0x120)) {
3166088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3166188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3166288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3166388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode =
3166488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0xf) |
3166588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 1) & 0x10);
3166688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3166788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeDt(cmode);
3166888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3166988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3167088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3167188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3167288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3167388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3167488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DOperand imm =
3167588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeImmediate(
3167688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3167788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3167888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3167988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
31680d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3168188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmov(CurrentCond(),
3168288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3168388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3168488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3168588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3168688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3168788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3168888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3168988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3169088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3169188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3169288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3169388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
3169488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800510
3169588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000020) {
3169688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3169788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800510
3169888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x100) == 0x0) ||
3169988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc00) == 0xc00)) {
3170088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3170188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3170288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3170388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned cmode = (instr >> 8) & 0xf;
3170488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3170588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVorr::DecodeDt(cmode);
3170688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3170788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3170888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3170988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3171088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3171188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3171288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DOperand imm =
3171388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVorr::DecodeImmediate(
3171488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              cmode,
3171588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr & 0xf) |
3171688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 12) & 0x70) |
3171788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 21) & 0x80));
31718d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VORR{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3171988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vorr(CurrentCond(),
3172088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3172188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3172288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3172388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3172488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3172588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3172688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000020: {
3172788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800530
3172888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x100) == 0x0) ||
3172988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc00) == 0xc00)) {
3173088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3173188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3173288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3173388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned cmode = (instr >> 8) & 0xf;
3173488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3173588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVbic::DecodeDt(cmode);
3173688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3173788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3173888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3173988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3174088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3174188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3174288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DOperand imm =
3174388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVbic::DecodeImmediate(
3174488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              cmode,
3174588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr & 0xf) |
3174688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 12) & 0x70) |
3174788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 21) & 0x80));
31748d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VBIC{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3174988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vbic(CurrentCond(),
3175088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3175188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3175288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3175388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3175488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3175588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3175688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3175788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3175888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3175988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3176088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3176188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3176288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
3176388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000300) {
3176488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3176588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800410
3176688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x10000000) == 0x10000000) {
3176788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380080) == 0x0)) {
3176888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3176988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3177088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3177188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt = Dt_L_imm6_4_Decode(
3177288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 19) & 0x7) |
3177388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 4) & 0x8));
3177488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
3177588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3177688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3177788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3177888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
3177988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
3178088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
3178188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
3178288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm =
3178388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        (dt.IsSize(64) ? 64
3178488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       : (dt.GetSize() * 2)) -
3178588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm6;
31786d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VSRI{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3178788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vsri(CurrentCond(),
3178888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
3178988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
3179088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rm),
3179188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         imm);
3179288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
3179388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3179488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3179588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3179688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3179788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
3179888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800510
3179988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x10000000) {
3180088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3180188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800510
3180288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380080) == 0x0)) {
3180388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3180488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3180588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3180688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt = Dt_L_imm6_3_Decode(
3180788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 19) & 0x7) |
3180888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 4) & 0x8));
3180988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3181088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3181188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3181288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3181388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3181488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3181588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3181688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
3181788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3181888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm =
3181988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm6 -
3182088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (dt.IsSize(64) ? 0 : dt.GetSize());
31821d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSHL{<c>}{<q>}.I<size> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3182288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vshl(CurrentCond(),
3182388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3182488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3182588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm),
3182688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3182788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3182888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3182988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x10000000: {
3183088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xff800510
3183188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380080) == 0x0)) {
3183288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3183388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3183488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3183588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt = Dt_L_imm6_4_Decode(
3183688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 19) & 0x7) |
3183788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 4) & 0x8));
3183888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3183988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3184088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3184188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3184288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3184388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3184488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3184588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
3184688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3184788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm =
3184888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm6 -
3184988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (dt.IsSize(64) ? 0 : dt.GetSize());
31850d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSLI{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3185188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vsli(CurrentCond(),
3185288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3185388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
3185488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm),
3185588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3185688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3185788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3185888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3185988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3186088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3186188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
3186288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800610
3186388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3186488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3186588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3186688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3186788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3186888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_2_Decode(((instr >> 19) & 0x7) |
3186988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3187088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3187188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3187288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3187388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3187488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3187588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3187688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
3187788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
3187888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3187988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3188088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
31881d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VQSHLU{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3188288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vqshlu(CurrentCond(),
3188388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
3188488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
3188588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rm),
3188688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         imm);
3188788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3188888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3188988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
3189088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800710
3189188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3189288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3189388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3189488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3189588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3189688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3189788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3189888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3189988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3190088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3190188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3190288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3190388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3190488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
3190588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
3190688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3190788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3190888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
31909d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VQSHL{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3191088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vqshl(CurrentCond(),
3191188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
3191288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rd),
3191388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm),
3191488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm);
3191588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3191688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3191788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3191888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3191988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3192088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3192188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3192288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3192388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000800: {
3192488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef800810
3192588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000080) {
3192688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3192788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800810
3192888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00380000) {
3192988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3193088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800810
3193188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000100) {
3193288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3193388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800810
3193488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000200) {
3193588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3193688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000020) {
3193788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000020: {
3193888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef800830
3193988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0xd00) == 0x100) ||
3194088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0xd00) == 0x500) ||
3194188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0xd00) == 0x900) ||
3194288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0xe00) == 0xe00)) {
3194388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3194488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3194588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3194688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned cmode =
3194788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 8) & 0xf;
3194888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3194988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ImmediateVmvn::DecodeDt(
3195088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      cmode);
3195188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3195288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3195388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3195488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3195588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3195688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3195788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
3195888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3195988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3196088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DOperand imm = ImmediateVmvn::
3196188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DecodeImmediate(cmode,
3196288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  (instr &
3196388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf) |
3196488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3196588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        12) &
3196688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x70) |
3196788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3196888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        21) &
3196988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x80));
31970d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3197188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmvn(CurrentCond(),
3197288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   dt,
3197388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rd),
3197488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   imm);
3197588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3197688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3197788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            default: {
3197888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x920) == 0x100) ||
3197988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x520) == 0x100) ||
3198088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x820) == 0x20) ||
3198188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x420) == 0x20) ||
3198288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x220) == 0x20) ||
3198388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x120) == 0x120)) {
3198488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3198588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3198688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3198788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned cmode =
3198888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 8) & 0xf) |
3198988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 1) & 0x10);
3199088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3199188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ImmediateVmov::DecodeDt(
3199288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      cmode);
3199388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3199488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3199588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3199688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3199788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3199888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3199988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
3200088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3200188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3200288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DOperand imm = ImmediateVmov::
3200388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DecodeImmediate(cmode,
3200488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  (instr &
3200588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf) |
3200688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3200788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        12) &
3200888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x70) |
3200988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3201088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        21) &
3201188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x80));
32012d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3201388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmov(CurrentCond(),
3201488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   dt,
3201588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rd),
3201688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   imm);
3201788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3201888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3201988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3202088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3202188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3202288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3202388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3202488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3202588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
3202688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800910
3202788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000020) {
3202888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3202988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800910
3203088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x100) == 0x0) ||
3203188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xc00) == 0xc00)) {
3203288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3203388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3203488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3203588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode = (instr >> 8) & 0xf;
3203688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3203788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVorr::DecodeDt(cmode);
3203888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3203988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3204088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3204188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3204288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3204388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3204488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DOperand imm =
3204588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVorr::DecodeImmediate(
3204688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3204788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3204888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3204988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
32050d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VORR{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3205188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vorr(CurrentCond(),
3205288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3205388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3205488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3205588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3205688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3205788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3205888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000020: {
3205988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800930
3206088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x100) == 0x0) ||
3206188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xc00) == 0xc00)) {
3206288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3206388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3206488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3206588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode = (instr >> 8) & 0xf;
3206688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3206788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVbic::DecodeDt(cmode);
3206888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3206988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3207088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3207188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3207288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3207388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3207488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DOperand imm =
3207588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVbic::DecodeImmediate(
3207688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3207788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3207888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3207988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
32080d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VBIC{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3208188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vbic(CurrentCond(),
3208288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3208388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3208488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3208588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3208688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3208788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3208888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3208988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3209088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3209188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3209288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3209388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3209488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00180000: {
3209588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef980810
3209688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000300) {
3209788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3209888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef980810
3209988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x10000000) {
3210088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3210188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef980810
3210288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3210388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3210488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3210588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3210688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_imm6_3_Decode(
3210788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 19) & 0x7);
3210888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3210988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3211088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3211188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3211288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3211388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3211488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3211588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3211688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3211788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3211888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3211988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3212088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3212188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32122d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3212388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vshrn(CurrentCond(),
3212488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
3212588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rd),
3212688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rm),
3212788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                imm);
3212888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3212988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3213088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x10000000: {
3213188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xff980810
3213288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3213388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3213488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3213588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3213688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3213788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Dt_imm6_2_Decode((instr >> 19) &
3213888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x7,
3213988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               (instr >> 28) &
3214088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x1);
3214188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3214288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3214388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3214488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3214588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3214688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3214788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3214888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3214988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3215088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3215188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3215288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3215388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3215488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32155d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3215688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vqshrun(CurrentCond(),
3215788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  dt,
3215888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(rd),
3215988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QRegister(rm),
3216088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm);
3216188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3216288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3216388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3216488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3216588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3216688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
3216788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef980910
3216888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0)) {
3216988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3217088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3217188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3217288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3217388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_1_Decode((instr >> 19) & 0x7,
3217488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3217588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3217688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3217788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3217888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3217988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3218088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3218188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
3218288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3218388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3218488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3218588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3218688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
3218788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3218888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = dt.GetSize() - imm6;
32189d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3219088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vqshrn(CurrentCond(),
3219188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
3219288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
3219388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rm),
3219488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             imm);
3219588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3219688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3219788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000200: {
3219888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef980a10
3219988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0) ||
3220088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x80000) ||
3220188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x100000) ||
3220288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x200000)) {
3220388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3220488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3220588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3220688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3220788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_4_Decode((instr >> 19) & 0x7,
3220888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3220988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3221088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3221188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3221288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3221388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3221488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3221588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3221688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3221788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3221888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3221988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3222088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
3222188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3222288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = imm6 - dt.GetSize();
32223d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3222488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vshll(CurrentCond(),
3222588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
3222688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
3222788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm),
3222888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
3222988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3223088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
322314339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
3223288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3223388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3223488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3223588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3223688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3223788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00280000: {
3223888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xefa80810
3223988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000300) {
3224088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3224188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefa80810
3224288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x10000000) {
3224388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3224488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xefa80810
3224588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3224688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3224788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3224888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3224988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_imm6_3_Decode(
3225088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 19) & 0x7);
3225188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3225288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3225388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3225488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3225588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3225688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3225788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3225888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3225988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3226088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3226188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3226288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3226388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3226488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32265d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3226688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vshrn(CurrentCond(),
3226788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
3226888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rd),
3226988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rm),
3227088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                imm);
3227188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3227288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3227388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x10000000: {
3227488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffa80810
3227588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3227688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3227788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3227888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3227988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3228088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Dt_imm6_2_Decode((instr >> 19) &
3228188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x7,
3228288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               (instr >> 28) &
3228388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x1);
3228488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3228588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3228688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3228788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3228888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3228988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3229088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3229188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3229288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3229388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3229488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3229588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3229688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3229788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32298d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3229988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vqshrun(CurrentCond(),
3230088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  dt,
3230188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(rd),
3230288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QRegister(rm),
3230388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm);
3230488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3230588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3230688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3230788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3230888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3230988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
3231088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefa80910
3231188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0)) {
3231288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3231388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3231488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3231588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3231688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_1_Decode((instr >> 19) & 0x7,
3231788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3231888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3231988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3232088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3232188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3232288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3232388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3232488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
3232588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3232688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3232788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3232888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3232988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
3233088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3233188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = dt.GetSize() - imm6;
32332d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3233388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vqshrn(CurrentCond(),
3233488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
3233588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
3233688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rm),
3233788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             imm);
3233888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3233988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3234088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000200: {
3234188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefa80a10
3234288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0) ||
3234388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x80000) ||
3234488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x100000) ||
3234588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x200000)) {
3234688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3234788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3234888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3234988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3235088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_4_Decode((instr >> 19) & 0x7,
3235188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3235288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3235388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3235488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3235588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3235688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3235788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3235888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3235988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3236088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3236188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3236288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3236388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
3236488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3236588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = imm6 - dt.GetSize();
32366d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3236788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vshll(CurrentCond(),
3236888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
3236988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
3237088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm),
3237188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
3237288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3237388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
323744339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
3237588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3237688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3237788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3237888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3237988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3238088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00300000: {
3238188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xefb00810
3238288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000300) {
3238388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3238488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefb00810
3238588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x10000000) {
3238688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3238788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xefb00810
3238888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3238988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3239088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3239188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3239288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_imm6_3_Decode(
3239388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 19) & 0x7);
3239488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3239588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3239688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3239788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3239888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3239988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3240088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3240188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3240288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3240388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3240488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3240588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3240688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3240788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32408d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3240988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vshrn(CurrentCond(),
3241088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
3241188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rd),
3241288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rm),
3241388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                imm);
3241488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3241588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3241688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x10000000: {
3241788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb00810
3241888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3241988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3242088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3242188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3242288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3242388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Dt_imm6_2_Decode((instr >> 19) &
3242488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x7,
3242588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               (instr >> 28) &
3242688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x1);
3242788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3242888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3242988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3243088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3243188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3243288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3243388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3243488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3243588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3243688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3243788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3243888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3243988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3244088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32441d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3244288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vqshrun(CurrentCond(),
3244388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  dt,
3244488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(rd),
3244588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QRegister(rm),
3244688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm);
3244788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3244888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3244988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3245088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3245188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3245288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
3245388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefb00910
3245488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0)) {
3245588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3245688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3245788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3245888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3245988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_1_Decode((instr >> 19) & 0x7,
3246088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3246188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3246288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3246388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3246488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3246588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3246688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3246788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
3246888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3246988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3247088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3247188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3247288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
3247388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3247488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = dt.GetSize() - imm6;
32475d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3247688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vqshrn(CurrentCond(),
3247788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
3247888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
3247988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rm),
3248088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             imm);
3248188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3248288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3248388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000200: {
3248488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefb00a10
3248588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0) ||
3248688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x80000) ||
3248788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x100000) ||
3248888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x200000)) {
3248988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3249088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3249188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3249288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3249388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_4_Decode((instr >> 19) & 0x7,
3249488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3249588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3249688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3249788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3249888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3249988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3250088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3250188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3250288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3250388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3250488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3250588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3250688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
3250788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3250888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = imm6 - dt.GetSize();
32509d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3251088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vshll(CurrentCond(),
3251188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
3251288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
3251388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm),
3251488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
3251588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3251688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
325174339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
3251888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3251988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3252088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3252188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3252288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3252388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00380000: {
3252488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xefb80810
3252588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000300) {
3252688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3252788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefb80810
3252888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x10000000) {
3252988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3253088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xefb80810
3253188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3253288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3253388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3253488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3253588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_imm6_3_Decode(
3253688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 19) & 0x7);
3253788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3253888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3253988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3254088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3254188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3254288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3254388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3254488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3254588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3254688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3254788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3254888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3254988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3255088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32551d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3255288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vshrn(CurrentCond(),
3255388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
3255488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rd),
3255588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rm),
3255688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                imm);
3255788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3255888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3255988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x10000000: {
3256088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xffb80810
3256188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3256288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3256388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3256488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3256588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3256688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Dt_imm6_2_Decode((instr >> 19) &
3256788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x7,
3256888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               (instr >> 28) &
3256988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x1);
3257088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3257188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3257288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3257388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3257488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3257588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3257688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3257788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3257888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3257988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3258088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3258188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3258288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3258388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32584d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3258588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vqshrun(CurrentCond(),
3258688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  dt,
3258788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(rd),
3258888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QRegister(rm),
3258988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm);
3259088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3259188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3259288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3259388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3259488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3259588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
3259688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefb80910
3259788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0)) {
3259888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3259988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3260088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3260188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3260288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_1_Decode((instr >> 19) & 0x7,
3260388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3260488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3260588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3260688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3260788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3260888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3260988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3261088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
3261188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3261288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3261388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3261488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3261588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
3261688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3261788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = dt.GetSize() - imm6;
32618d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3261988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vqshrn(CurrentCond(),
3262088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
3262188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
3262288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rm),
3262388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             imm);
3262488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3262588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3262688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000200: {
3262788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xefb80a10
3262888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0) ||
3262988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x80000) ||
3263088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x100000) ||
3263188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0x3f0000) == 0x200000)) {
3263288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3263388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3263488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3263588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3263688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_4_Decode((instr >> 19) & 0x7,
3263788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3263888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3263988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3264088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3264188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3264288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3264388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3264488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3264588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3264688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3264788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3264888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3264988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 5, 0);
3265088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3265188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = imm6 - dt.GetSize();
32652d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3265388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vshll(CurrentCond(),
3265488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
3265588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
3265688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm),
3265788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
3265888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3265988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
326604339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
3266188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3266288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3266388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3266488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3266588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3266688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
3266788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000300) {
3266888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3266988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800810
3267088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x10000000) {
3267188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3267288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800810
3267388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3267488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3267588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3267688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3267788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_imm6_3_Decode(
3267888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 19) & 0x7);
3267988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3268088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3268188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3268288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3268388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3268488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3268588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3268688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3268788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3268888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3268988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3269088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3269188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3269288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32693d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3269488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vshrn(CurrentCond(),
3269588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
3269688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rd),
3269788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rm),
3269888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                imm);
3269988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3270088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3270188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x10000000: {
3270288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xff800810
3270388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3270488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3270588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3270688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3270788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3270888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Dt_imm6_2_Decode((instr >> 19) &
3270988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x7,
3271088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               (instr >> 28) &
3271188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x1);
3271288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3271388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3271488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3271588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3271688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3271788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3271888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3271988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3272088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3272188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3272288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3272388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3272488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3272588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
32726d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3272788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vqshrun(CurrentCond(),
3272888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  dt,
3272988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(rd),
3273088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QRegister(rm),
3273188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm);
3273288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3273388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3273488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3273588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3273688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3273788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
3273888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800910
3273988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0)) {
3274088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3274188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3274288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3274388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3274488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_1_Decode((instr >> 19) & 0x7,
3274588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3274688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3274788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3274888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3274988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3275088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3275188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3275288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
3275388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3275488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3275588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3275688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3275788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
3275888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3275988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = dt.GetSize() - imm6;
32760d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3276188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vqshrn(CurrentCond(),
3276288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
3276388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
3276488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rm),
3276588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             imm);
3276688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3276788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3276888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000200: {
3276988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800a10
3277088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00070000) {
3277188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3277288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800a10
3277388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x003f0000) {
3277488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00080000: {
3277588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef880a10
3277688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3277788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3277888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x180000) ||
3277988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3278088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x280000) ||
3278188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3278288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x300000) ||
3278388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3278488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x380000)) {
3278588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3278688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3278788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3278888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_U_imm3H_1_Decode(
3278988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 19) & 0x7) |
3279088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 25) & 0x8));
3279188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3279288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3279388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3279488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3279588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3279688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3279788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3279888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3279988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3280088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3280188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3280288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3280388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3280488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3280588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
32806d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMOVL{<c>}{<q>}.<dt> <Qd>, <Dm> ; T1 NOLINT(whitespace/line_length)
3280788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmovl(CurrentCond(),
3280888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3280988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3281088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
3281188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3281288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3281388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00090000: {
3281488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef890a10
3281588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3281688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3281788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3281888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3281988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3282088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3282188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3282288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3282388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3282488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3282588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3282688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3282788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3282888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3282988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3283088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3283188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3283288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3283388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3283488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3283588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3283688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3283788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3283888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3283988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3284088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3284188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3284288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3284388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3284488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3284588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3284688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3284788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3284888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3284988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3285088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
32851d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3285288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3285388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3285488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3285588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3285688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3285788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3285888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3285988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x000a0000: {
3286088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef8a0a10
3286188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3286288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3286388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3286488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3286588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3286688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3286788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3286888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3286988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3287088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3287188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3287288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3287388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3287488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3287588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3287688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3287788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3287888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3287988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3288088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3288188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3288288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3288388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3288488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3288588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3288688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3288788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3288888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3288988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3289088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3289188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3289288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3289388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3289488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3289588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3289688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
32897d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3289888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3289988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3290088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3290188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3290288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3290388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3290488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3290588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x000b0000: {
3290688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef8b0a10
3290788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3290888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3290988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3291088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3291188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3291288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3291388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3291488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3291588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3291688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3291788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3291888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3291988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3292088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3292188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3292288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3292388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3292488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3292588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3292688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3292788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3292888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3292988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3293088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3293188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3293288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3293388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3293488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3293588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3293688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3293788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3293888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3293988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3294088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3294188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3294288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
32943d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3294488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3294588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3294688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3294788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3294888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3294988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3295088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3295188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x000c0000: {
3295288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef8c0a10
3295388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3295488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3295588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3295688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3295788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3295888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3295988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3296088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3296188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3296288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3296388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3296488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3296588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3296688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3296788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3296888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3296988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3297088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3297188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3297288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3297388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3297488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3297588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3297688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3297788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3297888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3297988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3298088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3298188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3298288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3298388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3298488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3298588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3298688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3298788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3298888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
32989d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3299088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3299188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3299288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3299388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3299488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3299588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3299688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3299788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x000d0000: {
3299888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef8d0a10
3299988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3300088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3300188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3300288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3300388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3300488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3300588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3300688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3300788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3300888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3300988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3301088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3301188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3301288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3301388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3301488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3301588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3301688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3301788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3301888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3301988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3302088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3302188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3302288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3302388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3302488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3302588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3302688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3302788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3302888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3302988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3303088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3303188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3303288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3303388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3303488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33035d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3303688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3303788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3303888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3303988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3304088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3304188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3304288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3304388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x000e0000: {
3304488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef8e0a10
3304588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3304688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3304788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3304888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3304988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3305088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3305188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3305288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3305388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3305488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3305588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3305688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3305788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3305888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3305988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3306088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3306188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3306288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3306388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3306488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3306588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3306688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3306788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3306888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3306988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3307088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3307188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3307288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3307388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3307488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3307588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3307688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3307788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3307888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3307988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3308088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33081d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3308288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3308388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3308488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3308588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3308688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3308788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3308888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3308988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x000f0000: {
3309088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef8f0a10
3309188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3309288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3309388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3309488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3309588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3309688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3309788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3309888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3309988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3310088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3310188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3310288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3310388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3310488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3310588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3310688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3310788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3310888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3310988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3311088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3311188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3311288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3311388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3311488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3311588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3311688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3311788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3311888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3311988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3312088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3312188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3312288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3312388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3312488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3312588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3312688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33127d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3312888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3312988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3313088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3313188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3313288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3313388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3313488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3313588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00100000: {
3313688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef900a10
3313788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3313888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3313988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x180000) ||
3314088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3314188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x280000) ||
3314288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3314388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x300000) ||
3314488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3314588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x380000)) {
3314688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3314788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3314888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3314988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_U_imm3H_1_Decode(
3315088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 19) & 0x7) |
3315188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 25) & 0x8));
3315288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3315388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3315488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3315588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3315688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3315788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3315888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3315988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3316088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3316188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3316288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3316388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3316488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3316588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3316688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
33167d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMOVL{<c>}{<q>}.<dt> <Qd>, <Dm> ; T1 NOLINT(whitespace/line_length)
3316888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmovl(CurrentCond(),
3316988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3317088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3317188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
3317288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3317388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3317488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00110000: {
3317588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef910a10
3317688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3317788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3317888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3317988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3318088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3318188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3318288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3318388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3318488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3318588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3318688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3318788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3318888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3318988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3319088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3319188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3319288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3319388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3319488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3319588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3319688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3319788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3319888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3319988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3320088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3320188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3320288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3320388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3320488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3320588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3320688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3320788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3320888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3320988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3321088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3321188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33212d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3321388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3321488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3321588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3321688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3321788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3321888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3321988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3322088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00120000: {
3322188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef920a10
3322288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3322388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3322488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3322588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3322688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3322788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3322888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3322988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3323088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3323188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3323288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3323388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3323488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3323588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3323688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3323788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3323888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3323988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3324088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3324188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3324288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3324388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3324488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3324588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3324688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3324788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3324888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3324988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3325088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3325188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3325288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3325388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3325488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3325588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3325688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3325788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33258d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3325988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3326088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3326188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3326288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3326388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3326488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3326588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3326688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00130000: {
3326788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef930a10
3326888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3326988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3327088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3327188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3327288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3327388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3327488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3327588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3327688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3327788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3327888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3327988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3328088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3328188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3328288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3328388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3328488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3328588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3328688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3328788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3328888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3328988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3329088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3329188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3329288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3329388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3329488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3329588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3329688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3329788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3329888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3329988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3330088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3330188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3330288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3330388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33304d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3330588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3330688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3330788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3330888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3330988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3331088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3331188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3331288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00140000: {
3331388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef940a10
3331488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3331588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3331688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3331788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3331888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3331988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3332088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3332188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3332288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3332388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3332488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3332588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3332688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3332788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3332888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3332988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3333088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3333188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3333288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3333388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3333488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3333588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3333688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3333788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3333888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3333988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3334088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3334188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3334288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3334388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3334488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3334588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3334688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3334788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3334888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3334988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33350d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3335188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3335288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3335388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3335488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3335588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3335688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3335788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3335888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00150000: {
3335988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef950a10
3336088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3336188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3336288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3336388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3336488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3336588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3336688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3336788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3336888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3336988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3337088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3337188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3337288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3337388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3337488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3337588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3337688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3337788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3337888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3337988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3338088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3338188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3338288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3338388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3338488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3338588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3338688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3338788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3338888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3338988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3339088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3339188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3339288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3339388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3339488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3339588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33396d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3339788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3339888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3339988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3340088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3340188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3340288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3340388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3340488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00160000: {
3340588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef960a10
3340688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3340788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3340888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3340988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3341088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3341188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3341288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3341388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3341488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3341588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3341688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3341788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3341888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3341988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3342088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3342188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3342288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3342388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3342488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3342588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3342688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3342788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3342888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3342988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3343088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3343188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3343288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3343388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3343488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3343588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3343688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3343788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3343888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3343988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3344088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3344188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33442d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3344388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3344488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3344588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3344688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3344788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3344888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3344988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3345088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00170000: {
3345188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef970a10
3345288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3345388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3345488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3345588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3345688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3345788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3345888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3345988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3346088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3346188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3346288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3346388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3346488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3346588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3346688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3346788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3346888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3346988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3347088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3347188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3347288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3347388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3347488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3347588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3347688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3347788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3347888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3347988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3348088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3348188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3348288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3348388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3348488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3348588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3348688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3348788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33488d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3348988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3349088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3349188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3349288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3349388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3349488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3349588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3349688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00180000: {
3349788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef980a10
3349888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3349988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3350088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3350188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3350288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3350388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3350488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3350588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3350688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3350788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3350888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3350988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3351088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3351188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3351288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3351388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3351488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3351588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3351688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3351788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3351888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3351988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3352088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3352188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3352288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3352388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3352488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3352588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3352688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3352788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3352888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3352988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3353088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3353188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3353288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3353388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33534d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3353588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3353688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3353788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3353888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3353988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3354088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3354188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3354288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00190000: {
3354388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef990a10
3354488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3354588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3354688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3354788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3354888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3354988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3355088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3355188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3355288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3355388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3355488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3355588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3355688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3355788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3355888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3355988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3356088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3356188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3356288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3356388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3356488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3356588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3356688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3356788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3356888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3356988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3357088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3357188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3357288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3357388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3357488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3357588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3357688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3357788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3357888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3357988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33580d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3358188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3358288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3358388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3358488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3358588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3358688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3358788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3358888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x001a0000: {
3358988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef9a0a10
3359088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3359188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3359288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3359388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3359488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3359588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3359688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3359788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3359888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3359988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3360088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3360188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3360288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3360388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3360488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3360588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3360688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3360788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3360888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3360988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3361088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3361188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3361288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3361388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3361488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3361588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3361688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3361788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3361888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3361988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3362088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3362188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3362288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3362388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3362488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3362588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33626d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3362788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3362888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3362988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3363088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3363188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3363288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3363388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3363488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x001b0000: {
3363588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef9b0a10
3363688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3363788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3363888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3363988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3364088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3364188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3364288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3364388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3364488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3364588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3364688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3364788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3364888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3364988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3365088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3365188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3365288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3365388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3365488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3365588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3365688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3365788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3365888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3365988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3366088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3366188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3366288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3366388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3366488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3366588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3366688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3366788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3366888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3366988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3367088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3367188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33672d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3367388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3367488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3367588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3367688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3367788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3367888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3367988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3368088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x001c0000: {
3368188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef9c0a10
3368288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3368388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3368488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3368588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3368688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3368788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3368888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3368988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3369088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3369188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3369288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3369388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3369488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3369588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3369688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3369788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3369888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3369988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3370088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3370188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3370288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3370388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3370488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3370588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3370688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3370788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3370888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3370988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3371088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3371188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3371288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3371388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3371488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3371588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3371688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3371788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33718d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3371988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3372088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3372188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3372288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3372388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3372488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3372588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3372688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x001d0000: {
3372788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef9d0a10
3372888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3372988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3373088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3373188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3373288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3373388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3373488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3373588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3373688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3373788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3373888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3373988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3374088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3374188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3374288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3374388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3374488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3374588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3374688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3374788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3374888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3374988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3375088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3375188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3375288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3375388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3375488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3375588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3375688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3375788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3375888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3375988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3376088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3376188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3376288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3376388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33764d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3376588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3376688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3376788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3376888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3376988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3377088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3377188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3377288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x001e0000: {
3377388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef9e0a10
3377488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3377588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3377688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3377788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3377888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3377988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3378088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3378188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3378288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3378388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3378488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3378588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3378688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3378788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3378888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3378988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3379088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3379188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3379288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3379388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3379488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3379588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3379688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3379788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3379888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3379988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3380088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3380188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3380288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3380388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3380488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3380588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3380688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3380788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3380888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3380988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33810d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3381188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3381288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3381388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3381488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3381588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3381688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3381788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3381888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x001f0000: {
3381988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef9f0a10
3382088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3382188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3382288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3382388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3382488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3382588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3382688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3382788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3382888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3382988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3383088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3383188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3383288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3383388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3383488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3383588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3383688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3383788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3383888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3383988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3384088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3384188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3384288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3384388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3384488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3384588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3384688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3384788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3384888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3384988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3385088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3385188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3385288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3385388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3385488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3385588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33856d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3385788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3385888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3385988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3386088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3386188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3386288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3386388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3386488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00200000: {
3386588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa00a10
3386688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3386788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3386888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x180000) ||
3386988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3387088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x280000) ||
3387188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3387288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x300000) ||
3387388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x380000) ==
3387488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x380000)) {
3387588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3387688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3387788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3387888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt = Dt_U_imm3H_1_Decode(
3387988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 19) & 0x7) |
3388088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 25) & 0x8));
3388188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3388288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3388388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3388488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3388588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3388688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3388788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3388888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3388988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3389088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3389188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3389288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3389388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3389488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3389588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
33896d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMOVL{<c>}{<q>}.<dt> <Qd>, <Dm> ; T1 NOLINT(whitespace/line_length)
3389788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmovl(CurrentCond(),
3389888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3389988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3390088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm));
3390188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3390288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3390388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00210000: {
3390488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa10a10
3390588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3390688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3390788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3390888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3390988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3391088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3391188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3391288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3391388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3391488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3391588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3391688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3391788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3391888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3391988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3392088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3392188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3392288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3392388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3392488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3392588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3392688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3392788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3392888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3392988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3393088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3393188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3393288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3393388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3393488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3393588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3393688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3393788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3393888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3393988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3394088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33941d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3394288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3394388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3394488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3394588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3394688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3394788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3394888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3394988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00220000: {
3395088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa20a10
3395188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3395288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3395388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3395488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3395588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3395688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3395788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3395888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3395988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3396088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3396188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3396288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3396388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3396488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3396588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3396688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3396788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3396888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3396988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3397088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3397188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3397288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3397388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3397488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3397588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3397688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3397788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3397888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3397988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3398088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3398188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3398288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3398388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3398488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3398588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3398688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
33987d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3398888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3398988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3399088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3399188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3399288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3399388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3399488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3399588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00230000: {
3399688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa30a10
3399788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3399888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3399988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3400088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3400188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3400288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3400388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3400488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3400588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3400688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3400788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3400888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3400988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3401088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3401188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3401288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3401388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3401488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3401588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3401688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3401788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3401888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3401988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3402088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3402188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3402288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3402388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3402488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3402588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3402688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3402788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3402888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3402988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3403088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3403188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3403288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34033d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3403488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3403588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3403688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3403788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3403888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3403988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3404088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3404188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00240000: {
3404288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa40a10
3404388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3404488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3404588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3404688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3404788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3404888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3404988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3405088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3405188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3405288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3405388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3405488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3405588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3405688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3405788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3405888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3405988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3406088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3406188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3406288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3406388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3406488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3406588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3406688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3406788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3406888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3406988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3407088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3407188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3407288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3407388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3407488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3407588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3407688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3407788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3407888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34079d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3408088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3408188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3408288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3408388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3408488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3408588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3408688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3408788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00250000: {
3408888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa50a10
3408988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3409088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3409188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3409288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3409388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3409488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3409588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3409688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3409788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3409888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3409988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3410088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3410188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3410288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3410388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3410488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3410588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3410688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3410788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3410888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3410988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3411088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3411188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3411288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3411388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3411488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3411588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3411688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3411788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3411888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3411988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3412088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3412188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3412288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3412388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3412488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34125d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3412688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3412788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3412888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3412988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3413088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3413188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3413288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3413388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00260000: {
3413488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa60a10
3413588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3413688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3413788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3413888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3413988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3414088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3414188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3414288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3414388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3414488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3414588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3414688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3414788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3414888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3414988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3415088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3415188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3415288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3415388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3415488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3415588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3415688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3415788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3415888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3415988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3416088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3416188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3416288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3416388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3416488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3416588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3416688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3416788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3416888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3416988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3417088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34171d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3417288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3417388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3417488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3417588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3417688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3417788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3417888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3417988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00270000: {
3418088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa70a10
3418188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3418288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3418388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3418488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3418588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3418688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3418788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3418888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3418988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3419088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3419188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3419288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3419388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3419488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3419588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3419688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3419788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3419888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3419988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3420088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3420188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3420288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3420388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3420488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3420588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3420688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3420788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3420888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3420988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3421088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3421188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3421288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3421388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3421488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3421588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3421688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34217d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3421888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3421988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3422088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3422188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3422288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3422388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3422488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3422588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00280000: {
3422688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa80a10
3422788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3422888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3422988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3423088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3423188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3423288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3423388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3423488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3423588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3423688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3423788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3423888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3423988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3424088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3424188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3424288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3424388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3424488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3424588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3424688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3424788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3424888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3424988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3425088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3425188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3425288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3425388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3425488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3425588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3425688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3425788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3425888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3425988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3426088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3426188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3426288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34263d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3426488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3426588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3426688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3426788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3426888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3426988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3427088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3427188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00290000: {
3427288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefa90a10
3427388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3427488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3427588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3427688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3427788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3427888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3427988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3428088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3428188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3428288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3428388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3428488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3428588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3428688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3428788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3428888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3428988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3429088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3429188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3429288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3429388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3429488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3429588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3429688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3429788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3429888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3429988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3430088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3430188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3430288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3430388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3430488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3430588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3430688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3430788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3430888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34309d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3431088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3431188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3431288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3431388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3431488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3431588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3431688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3431788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x002a0000: {
3431888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefaa0a10
3431988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3432088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3432188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3432288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3432388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3432488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3432588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3432688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3432788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3432888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3432988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3433088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3433188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3433288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3433388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3433488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3433588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3433688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3433788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3433888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3433988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3434088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3434188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3434288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3434388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3434488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3434588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3434688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3434788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3434888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3434988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3435088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3435188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3435288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3435388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3435488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34355d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3435688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3435788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3435888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3435988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3436088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3436188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3436288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3436388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x002b0000: {
3436488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefab0a10
3436588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3436688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3436788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3436888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3436988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3437088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3437188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3437288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3437388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3437488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3437588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3437688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3437788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3437888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3437988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3438088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3438188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3438288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3438388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3438488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3438588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3438688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3438788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3438888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3438988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3439088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3439188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3439288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3439388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3439488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3439588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3439688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3439788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3439888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3439988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3440088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34401d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3440288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3440388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3440488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3440588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3440688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3440788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3440888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3440988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x002c0000: {
3441088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefac0a10
3441188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3441288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3441388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3441488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3441588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3441688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3441788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3441888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3441988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3442088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3442188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3442288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3442388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3442488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3442588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3442688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3442788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3442888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3442988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3443088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3443188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3443288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3443388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3443488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3443588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3443688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3443788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3443888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3443988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3444088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3444188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3444288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3444388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3444488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3444588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3444688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34447d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3444888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3444988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3445088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3445188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3445288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3445388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3445488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3445588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x002d0000: {
3445688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefad0a10
3445788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3445888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3445988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3446088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3446188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3446288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3446388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3446488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3446588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3446688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3446788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3446888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3446988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3447088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3447188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3447288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3447388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3447488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3447588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3447688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3447788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3447888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3447988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3448088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3448188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3448288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3448388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3448488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3448588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3448688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3448788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3448888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3448988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3449088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3449188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3449288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34493d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3449488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3449588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3449688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3449788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3449888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3449988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3450088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3450188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x002e0000: {
3450288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefae0a10
3450388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3450488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3450588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3450688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3450788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3450888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3450988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3451088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3451188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3451288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3451388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3451488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3451588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3451688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3451788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3451888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3451988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3452088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3452188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3452288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3452388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3452488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3452588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3452688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3452788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3452888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3452988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3453088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3453188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3453288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3453388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3453488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3453588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3453688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3453788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3453888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34539d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3454088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3454188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3454288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3454388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3454488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3454588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3454688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3454788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x002f0000: {
3454888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefaf0a10
3454988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3455088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3455188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3455288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3455388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3455488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3455588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3455688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3455788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3455888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3455988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3456088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3456188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3456288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3456388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3456488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3456588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3456688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3456788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3456888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3456988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3457088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3457188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3457288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3457388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3457488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3457588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3457688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3457788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3457888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3457988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3458088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3458188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3458288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3458388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3458488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34585d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3458688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3458788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3458888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3458988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3459088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3459188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3459288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3459388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00300000: {
3459488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb00a10
3459588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3459688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3459788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3459888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3459988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3460088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3460188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3460288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3460388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3460488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3460588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3460688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3460788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3460888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3460988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3461088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3461188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3461288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3461388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3461488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3461588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3461688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3461788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3461888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3461988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3462088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3462188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3462288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3462388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3462488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3462588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3462688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3462788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3462888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3462988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3463088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34631d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3463288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3463388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3463488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3463588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3463688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3463788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3463888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3463988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00310000: {
3464088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb10a10
3464188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3464288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3464388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3464488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3464588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3464688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3464788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3464888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3464988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3465088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3465188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3465288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3465388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3465488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3465588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3465688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3465788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3465888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3465988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3466088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3466188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3466288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3466388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3466488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3466588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3466688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3466788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3466888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3466988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3467088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3467188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3467288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3467388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3467488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3467588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3467688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34677d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3467888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3467988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3468088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3468188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3468288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3468388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3468488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3468588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00320000: {
3468688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb20a10
3468788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3468888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3468988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3469088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3469188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3469288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3469388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3469488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3469588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3469688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3469788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3469888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3469988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3470088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3470188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3470288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3470388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3470488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3470588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3470688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3470788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3470888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3470988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3471088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3471188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3471288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3471388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3471488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3471588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3471688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3471788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3471888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3471988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3472088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3472188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3472288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34723d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3472488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3472588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3472688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3472788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3472888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3472988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3473088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3473188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00330000: {
3473288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb30a10
3473388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3473488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3473588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3473688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3473788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3473888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3473988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3474088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3474188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3474288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3474388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3474488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3474588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3474688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3474788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3474888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3474988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3475088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3475188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3475288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3475388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3475488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3475588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3475688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3475788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3475888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3475988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3476088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3476188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3476288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3476388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3476488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3476588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3476688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3476788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3476888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34769d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3477088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3477188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3477288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3477388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3477488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3477588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3477688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3477788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00340000: {
3477888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb40a10
3477988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3478088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3478188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3478288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3478388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3478488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3478588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3478688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3478788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3478888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3478988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3479088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3479188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3479288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3479388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3479488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3479588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3479688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3479788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3479888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3479988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3480088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3480188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3480288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3480388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3480488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3480588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3480688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3480788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3480888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3480988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3481088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3481188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3481288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3481388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3481488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34815d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3481688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3481788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3481888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3481988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3482088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3482188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3482288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3482388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00350000: {
3482488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb50a10
3482588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3482688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3482788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3482888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3482988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3483088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3483188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3483288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3483388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3483488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3483588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3483688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3483788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3483888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3483988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3484088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3484188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3484288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3484388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3484488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3484588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3484688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3484788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3484888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3484988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3485088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3485188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3485288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3485388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3485488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3485588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3485688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3485788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3485888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3485988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3486088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34861d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3486288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3486388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3486488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3486588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3486688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3486788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3486888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3486988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00360000: {
3487088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb60a10
3487188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3487288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3487388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3487488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3487588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3487688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3487788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3487888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3487988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3488088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3488188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3488288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3488388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3488488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3488588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3488688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3488788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3488888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3488988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3489088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3489188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3489288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3489388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3489488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3489588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3489688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3489788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3489888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3489988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3490088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3490188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3490288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3490388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3490488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3490588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3490688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34907d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3490888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3490988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3491088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3491188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3491288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3491388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3491488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3491588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00370000: {
3491688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb70a10
3491788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3491888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3491988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3492088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3492188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3492288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3492388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3492488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3492588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3492688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3492788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3492888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3492988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3493088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3493188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3493288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3493388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3493488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3493588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3493688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3493788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3493888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3493988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3494088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3494188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3494288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3494388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3494488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3494588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3494688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3494788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3494888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3494988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3495088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3495188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3495288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34953d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3495488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3495588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3495688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3495788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3495888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3495988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3496088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3496188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00380000: {
3496288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb80a10
3496388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3496488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3496588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3496688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3496788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3496888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3496988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3497088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3497188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3497288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3497388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3497488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3497588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3497688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3497788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3497888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3497988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3498088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3498188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3498288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3498388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3498488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3498588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3498688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3498788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3498888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3498988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3499088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3499188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3499288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3499388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3499488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3499588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3499688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3499788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3499888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
34999d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3500088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3500188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3500288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3500388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3500488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3500588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3500688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3500788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00390000: {
3500888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefb90a10
3500988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3501088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3501188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3501288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3501388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3501488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3501588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3501688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3501788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3501888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3501988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3502088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3502188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3502288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3502388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3502488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3502588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3502688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3502788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3502888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3502988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3503088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3503188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3503288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3503388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3503488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3503588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3503688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3503788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3503888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3503988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3504088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3504188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3504288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3504388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3504488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
35045d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3504688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3504788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3504888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3504988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3505088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3505188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3505288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3505388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x003a0000: {
3505488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefba0a10
3505588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3505688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3505788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3505888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3505988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3506088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3506188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3506288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3506388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3506488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3506588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3506688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3506788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3506888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3506988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3507088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3507188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3507288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3507388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3507488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3507588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3507688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3507788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3507888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3507988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3508088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3508188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3508288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3508388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3508488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3508588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3508688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3508788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3508888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3508988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3509088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
35091d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3509288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3509388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3509488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3509588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3509688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3509788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3509888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3509988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x003b0000: {
3510088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefbb0a10
3510188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3510288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3510388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3510488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3510588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3510688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3510788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3510888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3510988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3511088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3511188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3511288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3511388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3511488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3511588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3511688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3511788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3511888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3511988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3512088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3512188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3512288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3512388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3512488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3512588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3512688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3512788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3512888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3512988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3513088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3513188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3513288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3513388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3513488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3513588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3513688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
35137d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3513888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3513988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3514088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3514188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3514288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3514388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3514488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3514588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x003c0000: {
3514688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefbc0a10
3514788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3514888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3514988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3515088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3515188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3515288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3515388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3515488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3515588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3515688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3515788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3515888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3515988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3516088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3516188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3516288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3516388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3516488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3516588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3516688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3516788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3516888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3516988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3517088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3517188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3517288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3517388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3517488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3517588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3517688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3517788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3517888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3517988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3518088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3518188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3518288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
35183d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3518488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3518588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3518688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3518788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3518888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3518988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3519088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3519188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x003d0000: {
3519288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefbd0a10
3519388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3519488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3519588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3519688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3519788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3519888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3519988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3520088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3520188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3520288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3520388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3520488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3520588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3520688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3520788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3520888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3520988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3521088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3521188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3521288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3521388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3521488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3521588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3521688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3521788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3521888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3521988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3522088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3522188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3522288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3522388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3522488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3522588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3522688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3522788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3522888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
35229d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3523088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3523188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3523288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3523388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3523488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3523588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3523688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3523788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x003e0000: {
3523888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefbe0a10
3523988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3524088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3524188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3524288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3524388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3524488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3524588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3524688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3524788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3524888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3524988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3525088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3525188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3525288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3525388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3525488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3525588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3525688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3525788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3525888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3525988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3526088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3526188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3526288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3526388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3526488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3526588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3526688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3526788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3526888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3526988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3527088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3527188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3527288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3527388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3527488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
35275d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3527688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3527788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3527888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3527988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3528088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3528188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3528288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3528388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x003f0000: {
3528488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xefbf0a10
3528588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x380000) == 0x0) ||
3528688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3528788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x80000) ||
3528888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3528988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x100000) ||
3529088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x3f0000) ==
3529188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   0x200000)) {
3529288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3529388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3529488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3529588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3529688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  Dt_imm6_4_Decode((instr >>
3529788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    19) &
3529888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x7,
3529988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   (instr >>
3530088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    28) &
3530188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x1);
3530288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3530388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3530488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3530588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3530688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3530788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3530888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3530988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3531088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3531188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3531288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3531388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3531488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3531588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rm =
3531688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr, 5, 0);
3531788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm6 =
3531888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 16) & 0x3f;
3531988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              uint32_t imm =
3532088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  imm6 - dt.GetSize();
35321d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3532288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vshll(CurrentCond(),
3532388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    dt,
3532488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    QRegister(rd),
3532588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    DRegister(rm),
3532688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    imm);
3532788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3532888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
353294339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                            default:
3533088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedT32(instr);
3533188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3533288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3533388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3533488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3533588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3533688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0) ||
3533788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x3f0000) == 0x80000) ||
3533888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x3f0000) ==
3533988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               0x100000) ||
3534088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x3f0000) ==
3534188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               0x200000)) {
3534288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3534388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3534488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3534588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3534688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Dt_imm6_4_Decode((instr >> 19) &
3534788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x7,
3534888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               (instr >> 28) &
3534988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x1);
3535088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3535188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3535288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3535388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3535488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3535588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3535688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3535788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3535888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3535988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3536088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3536188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 5, 0);
3536288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3536388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = imm6 - dt.GetSize();
35364d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3536588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vshll(CurrentCond(),
3536688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                dt,
3536788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                QRegister(rd),
3536888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                DRegister(rm),
3536988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                imm);
3537088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3537188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3537288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3537388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3537488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
353754339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
3537688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3537788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3537888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3537988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3538088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3538188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3538288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3538388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
353844339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3538588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3538688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3538788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3538888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3538988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3539088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000c00: {
3539188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef800c10
3539288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000080) {
3539388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3539488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800c10
3539588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00200000) {
3539688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3539788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800c10
3539888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00180000) {
3539988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3540088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800c10
3540188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000300) {
3540288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000200: {
3540388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800e10
3540488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x920) == 0x100) ||
3540588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x520) == 0x100) ||
3540688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x820) == 0x20) ||
3540788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x420) == 0x20) ||
3540888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x220) == 0x20) ||
3540988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x120) == 0x120)) {
3541088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3541188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3541288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3541388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode =
3541488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0xf) |
3541588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 1) & 0x10);
3541688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3541788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeDt(cmode);
3541888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3541988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3542088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3542188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3542288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3542388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3542488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DOperand imm =
3542588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeImmediate(
3542688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3542788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3542888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3542988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
35430d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3543188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmov(CurrentCond(),
3543288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3543388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3543488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3543588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3543688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3543788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000300: {
3543888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800f10
3543988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x920) == 0x100) ||
3544088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x520) == 0x100) ||
3544188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x820) == 0x20) ||
3544288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x420) == 0x20) ||
3544388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x220) == 0x20) ||
3544488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x120) == 0x120)) {
3544588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3544688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3544788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3544888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode =
3544988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0xf) |
3545088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 1) & 0x10);
3545188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3545288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeDt(cmode);
3545388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3545488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3545588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3545688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3545788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3545888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3545988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DOperand imm =
3546088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeImmediate(
3546188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3546288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3546388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3546488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
35465d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3546688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmov(CurrentCond(),
3546788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3546888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               DRegister(rd),
3546988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3547088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3547188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3547288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3547388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000020) {
3547488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000020: {
3547588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef800c30
3547688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              switch (instr & 0x00000f20) {
3547788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000000: {
3547888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c10
3547988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3548088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3548188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3548288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3548388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3548488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3548588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3548688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3548788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3548888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3548988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3549088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3549188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3549288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3549388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3549488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3549588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3549688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3549788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3549888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3549988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3550088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3550188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3550288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3550388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3550488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3550588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3550688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3550788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3550888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3550988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3551088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3551188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3551288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3551388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3551488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3551588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3551688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35517d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3551888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3551988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3552088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3552188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3552288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3552388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3552488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000020: {
3552588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c30
3552688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3552788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3552888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3552988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3553088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3553188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3553288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3553388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3553488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3553588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3553688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3553788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3553888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3553988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3554088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3554188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3554288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3554388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3554488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3554588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3554688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3554788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3554888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3554988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3555088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3555188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmvn::
3555288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3555388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3555488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3555588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3555688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3555788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3555888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35559d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3556088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3556188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3556288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3556388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3556488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3556588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3556688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000200: {
3556788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e10
3556888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3556988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3557088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3557188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3557288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3557388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3557488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3557588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3557688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3557788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3557888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3557988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3558088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3558188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3558288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3558388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3558488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3558588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3558688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3558788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3558888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3558988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3559088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3559188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3559288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3559388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3559488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3559588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3559688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3559788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3559888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3559988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3560088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3560188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3560288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3560388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3560488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3560588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35606d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3560788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3560888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3560988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3561088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3561188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3561288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3561388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000220: {
3561488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e30
3561588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3561688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3561788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3561888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3561988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3562088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3562188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3562288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3562388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3562488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3562588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3562688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3562788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3562888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3562988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3563088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3563188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3563288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3563388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3563488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3563588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3563688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3563788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3563888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3563988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3564088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmvn::
3564188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3564288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3564388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3564488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3564588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3564688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3564788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35648d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3564988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3565088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3565188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3565288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3565388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3565488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3565588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000400: {
3565688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c10
3565788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3565888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3565988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3566088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3566188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3566288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3566388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3566488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3566588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3566688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3566788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3566888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3566988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3567088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3567188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3567288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3567388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3567488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3567588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3567688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3567788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3567888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3567988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3568088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3568188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3568288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3568388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3568488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3568588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3568688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3568788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3568888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3568988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3569088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3569188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3569288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3569388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3569488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35695d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3569688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3569788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3569888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3569988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3570088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3570188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3570288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000420: {
3570388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c30
3570488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3570588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3570688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3570788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3570888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3570988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3571088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3571188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3571288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3571388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3571488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3571588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3571688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3571788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3571888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3571988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3572088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3572188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3572288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3572388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3572488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3572588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3572688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3572788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3572888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3572988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmvn::
3573088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3573188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3573288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3573388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3573488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3573588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3573688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35737d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3573888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3573988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3574088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3574188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3574288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3574388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3574488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000600: {
3574588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e10
3574688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3574788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3574888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3574988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3575088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3575188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3575288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3575388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3575488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3575588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3575688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3575788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3575888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3575988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3576088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3576188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3576288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3576388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3576488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3576588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3576688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3576788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3576888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3576988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3577088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3577188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3577288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3577388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3577488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3577588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3577688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3577788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3577888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3577988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3578088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3578188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3578288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3578388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35784d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3578588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3578688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3578788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3578888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3578988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3579088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3579188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000620: {
3579288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e30
3579388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3579488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3579588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3579688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3579788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3579888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3579988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3580088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3580188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3580288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3580388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3580488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3580588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3580688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3580788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3580888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3580988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3581088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3581188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3581288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3581388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3581488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3581588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3581688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3581788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3581888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmvn::
3581988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3582088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3582188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3582288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3582388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3582488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3582588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35826d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3582788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3582888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3582988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3583088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3583188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3583288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3583388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000800: {
3583488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c10
3583588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3583688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3583788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3583888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3583988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3584088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3584188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3584288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3584388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3584488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3584588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3584688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3584788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3584888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3584988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3585088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3585188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3585288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3585388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3585488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3585588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3585688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3585788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3585888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3585988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3586088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3586188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3586288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3586388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3586488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3586588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3586688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3586788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3586888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3586988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3587088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3587188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3587288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35873d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3587488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3587588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3587688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3587788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3587888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3587988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3588088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000820: {
3588188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c30
3588288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3588388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3588488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3588588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3588688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3588788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3588888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3588988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3589088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3589188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3589288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3589388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3589488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3589588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3589688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3589788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3589888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3589988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3590088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3590188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3590288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3590388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3590488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3590588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3590688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3590788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmvn::
3590888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3590988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3591088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3591188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3591288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3591388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3591488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35915d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3591688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3591788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3591888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3591988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3592088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3592188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3592288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000a00: {
3592388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e10
3592488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3592588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3592688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3592788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3592888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3592988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3593088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3593188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3593288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3593388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3593488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3593588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3593688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3593788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3593888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3593988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3594088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3594188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3594288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3594388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3594488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3594588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3594688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3594788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3594888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3594988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3595088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3595188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3595288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3595388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3595488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3595588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3595688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3595788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3595888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3595988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3596088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3596188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
35962d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3596388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3596488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3596588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3596688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3596788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3596888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3596988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000a20: {
3597088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e30
3597188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3597288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3597388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3597488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3597588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3597688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3597788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3597888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3597988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3598088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3598188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3598288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3598388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3598488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3598588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3598688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3598788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3598888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3598988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3599088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3599188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3599288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3599388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3599488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3599588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3599688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmvn::
3599788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3599888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3599988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3600088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3600188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3600288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3600388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
36004d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3600588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3600688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3600788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3600888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3600988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3601088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3601188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000c00: {
3601288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c10
3601388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3601488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3601588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3601688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3601788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3601888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3601988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3602088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3602188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3602288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3602388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3602488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3602588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3602688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3602788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3602888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3602988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3603088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3603188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3603288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3603388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3603488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3603588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3603688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3603788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3603888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3603988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3604088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3604188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3604288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3604388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3604488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3604588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3604688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3604788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3604888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3604988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3605088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
36051d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3605288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3605388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3605488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3605588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3605688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3605788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3605888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000c20: {
3605988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c30
3606088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3606188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3606288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3606388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3606488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3606588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3606688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3606788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3606888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3606988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3607088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3607188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3607288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3607388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3607488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3607588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3607688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3607788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3607888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3607988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3608088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3608188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3608288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3608388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3608488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3608588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmvn::
3608688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3608788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3608888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3608988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3609088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3609188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3609288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
36093d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3609488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3609588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3609688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3609788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3609888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3609988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3610088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000d00: {
3610188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800d10
3610288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3610388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3610488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3610588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3610688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3610788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3610888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3610988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3611088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3611188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3611288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3611388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3611488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3611588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3611688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3611788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3611888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3611988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3612088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3612188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3612288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3612388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3612488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3612588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3612688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3612788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3612888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3612988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3613088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3613188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3613288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3613388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3613488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3613588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3613688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3613788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3613888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3613988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
36140d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3614188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3614288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3614388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3614488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3614588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3614688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3614788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000d20: {
3614888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800d30
3614988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3615088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3615188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3615288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3615388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3615488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3615588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3615688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3615788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3615888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3615988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3616088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3616188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3616288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3616388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3616488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3616588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3616688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3616788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3616888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3616988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3617088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3617188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3617288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3617388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3617488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmvn::
3617588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3617688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3617788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3617888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3617988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3618088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3618188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
36182d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3618388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3618488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3618588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3618688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3618788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3618888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3618988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000e00: {
3619088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e10
3619188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3619288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3619388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3619488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3619588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3619688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3619788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3619888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3619988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3620088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3620188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3620288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3620388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3620488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3620588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3620688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3620788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3620888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3620988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3621088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3621188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3621288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3621388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3621488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3621588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3621688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3621788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3621888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3621988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3622088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3622188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3622288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3622388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3622488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3622588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3622688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3622788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3622888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
36229d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3623088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3623188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3623288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3623388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3623488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3623588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3623688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000e20: {
3623788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e30
3623888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3623988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3624088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3624188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3624288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3624388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3624488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3624588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3624688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3624788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3624888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3624988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3625088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3625188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3625288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3625388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3625488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3625588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3625688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3625788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3625888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3625988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3626088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3626188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3626288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3626388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3626488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3626588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3626688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3626788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3626888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3626988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3627088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3627188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3627288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3627388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3627488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3627588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
36276d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3627788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3627888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3627988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3628088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3628188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3628288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3628388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000f00: {
3628488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800f10
3628588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3628688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3628788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3628888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3628988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3629088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3629188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3629288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3629388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3629488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3629588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3629688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3629788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3629888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3629988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3630088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3630188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3630288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3630388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3630488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3630588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3630688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3630788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3630888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3630988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3631088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3631188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3631288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractDRegister(instr,
3631388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3631488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3631588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DOperand imm = ImmediateVmov::
3631688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3631788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3631888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3631988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3632088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3632188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3632288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
36323d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3632488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3632588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3632688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       DRegister(rd),
3632788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3632888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3632988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
363304339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                                default:
3633188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  UnallocatedT32(instr);
3633288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3633388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3633488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3633588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3633688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            default: {
3633788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x920) == 0x100) ||
3633888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x520) == 0x100) ||
3633988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x820) == 0x20) ||
3634088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x420) == 0x20) ||
3634188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x220) == 0x20) ||
3634288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x120) == 0x120)) {
3634388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3634488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3634588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3634688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned cmode =
3634788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 8) & 0xf) |
3634888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 1) & 0x10);
3634988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3635088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ImmediateVmov::DecodeDt(
3635188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      cmode);
3635288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3635388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3635488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3635588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3635688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3635788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3635888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractDRegister(instr,
3635988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3636088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3636188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DOperand imm = ImmediateVmov::
3636288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DecodeImmediate(cmode,
3636388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  (instr &
3636488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf) |
3636588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3636688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        12) &
3636788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x70) |
3636888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3636988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        21) &
3637088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x80));
36371d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3637288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmov(CurrentCond(),
3637388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   dt,
3637488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rd),
3637588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   imm);
3637688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3637788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3637888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3637988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3638088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3638188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3638288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3638388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
363844339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
3638588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3638688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3638788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3638888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3638988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3639088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
3639188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000200) == 0x00000200) {
3639288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x200000) == 0x0)) {
3639388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3639488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3639588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3639688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt1 = Dt_op_U_1_Decode1(
3639788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 28) & 0x1) |
3639888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 7) & 0x2));
3639988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt1.Is(kDataTypeValueInvalid)) {
3640088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3640188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3640288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3640388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt2 = Dt_op_U_1_Decode2(
3640488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 28) & 0x1) |
3640588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 7) & 0x2));
3640688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt2.Is(kDataTypeValueInvalid)) {
3640788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3640888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3640988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3641088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
3641188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
3641288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
3641388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t fbits =
3641488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        64 - ((instr >> 16) & 0x3f);
36415d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VCVT{<c>}{<q>}.<dt>.<dt> <Dd>, <Dm>, #<fbits> ; T1 NOLINT(whitespace/line_length)
3641688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvt(CurrentCond(),
3641788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt1,
3641888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt2,
3641988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
3642088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rm),
3642188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         fbits);
3642288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
3642388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3642488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3642588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3642688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3642788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3642888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3642988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
364304339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3643188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3643288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3643388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3643488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3643588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3643688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3643788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
3643888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3643988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    case 0x00800040: {
3644088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // 0xef800050
3644188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      switch (instr & 0x00000c00) {
3644288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000000: {
3644388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef800050
3644488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00380080) {
3644588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3644688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800050
3644788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000100) {
3644888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3644988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800050
3645088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000200) {
3645188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default: {
3645288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000020) {
3645388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000020: {
3645488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800070
3645588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xd00) == 0x100) ||
3645688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xd00) == 0x500) ||
3645788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xd00) == 0x900) ||
3645888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xe00) == 0xe00)) {
3645988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3646088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3646188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3646288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode = (instr >> 8) & 0xf;
3646388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3646488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmvn::DecodeDt(cmode);
3646588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3646688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3646788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3646888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3646988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3647088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3647188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3647288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3647388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3647488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3647588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QOperand imm =
3647688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmvn::DecodeImmediate(
3647788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3647888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3647988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3648088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
36481d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3648288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmvn(CurrentCond(),
3648388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3648488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3648588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3648688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3648788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3648888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3648988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x920) == 0x100) ||
3649088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x520) == 0x100) ||
3649188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x820) == 0x20) ||
3649288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x420) == 0x20) ||
3649388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x220) == 0x20) ||
3649488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x120) == 0x120)) {
3649588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3649688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3649788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3649888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode =
3649988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0xf) |
3650088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 1) & 0x10);
3650188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3650288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeDt(cmode);
3650388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3650488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3650588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3650688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3650788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3650888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3650988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3651088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3651188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3651288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3651388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QOperand imm =
3651488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeImmediate(
3651588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3651688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3651788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3651888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
36519d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3652088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmov(CurrentCond(),
3652188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3652288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3652388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3652488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3652588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3652688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3652788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3652888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3652988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3653088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3653188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3653288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
3653388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800150
3653488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000020) {
3653588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3653688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800150
3653788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x100) == 0x0) ||
3653888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc00) == 0xc00)) {
3653988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3654088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3654188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3654288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned cmode = (instr >> 8) & 0xf;
3654388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3654488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVorr::DecodeDt(cmode);
3654588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3654688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3654788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3654888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3654988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3655088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3655188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3655288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3655388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3655488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3655588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QOperand imm =
3655688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVorr::DecodeImmediate(
3655788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              cmode,
3655888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr & 0xf) |
3655988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 12) & 0x70) |
3656088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 21) & 0x80));
36561d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VORR{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3656288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vorr(CurrentCond(),
3656388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3656488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3656588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3656688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3656788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3656888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3656988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000020: {
3657088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800170
3657188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x100) == 0x0) ||
3657288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc00) == 0xc00)) {
3657388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3657488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3657588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3657688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned cmode = (instr >> 8) & 0xf;
3657788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3657888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVbic::DecodeDt(cmode);
3657988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3658088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3658188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3658288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3658388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3658488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3658588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3658688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3658788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3658888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3658988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QOperand imm =
3659088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVbic::DecodeImmediate(
3659188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              cmode,
3659288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr & 0xf) |
3659388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 12) & 0x70) |
3659488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 21) & 0x80));
36595d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VBIC{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3659688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vbic(CurrentCond(),
3659788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3659888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3659988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3660088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3660188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3660288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3660388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3660488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3660588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3660688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3660788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3660888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3660988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
3661088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000300) {
3661188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3661288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800050
3661388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3661488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3661588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3661688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3661788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3661888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3661988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3662088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3662188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3662288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3662388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3662488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3662588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3662688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
3662788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3662888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3662988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3663088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
3663188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
3663288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3663388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3663488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3663588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
3663688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3663788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3663888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (dt.IsSize(64) ? 64
3663988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     : (dt.GetSize() * 2)) -
3664088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6;
36641d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VSHR{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3664288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vshr(CurrentCond(),
3664388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
3664488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
3664588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm),
3664688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
3664788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3664888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3664988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
3665088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800150
3665188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3665288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3665388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3665488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3665588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3665688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3665788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3665888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3665988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3666088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3666188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3666288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3666388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3666488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
3666588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3666688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3666788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3666888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
3666988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
3667088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3667188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3667288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3667388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
3667488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3667588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3667688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (dt.IsSize(64) ? 64
3667788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     : (dt.GetSize() * 2)) -
3667888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6;
36679d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VSRA{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3668088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vsra(CurrentCond(),
3668188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
3668288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
3668388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm),
3668488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
3668588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3668688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3668788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
3668888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800250
3668988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3669088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3669188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3669288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3669388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3669488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3669588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3669688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3669788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3669888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3669988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3670088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3670188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3670288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
3670388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3670488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3670588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3670688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
3670788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
3670888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3670988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3671088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3671188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
3671288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3671388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3671488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (dt.IsSize(64) ? 64
3671588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     : (dt.GetSize() * 2)) -
3671688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6;
36717d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VRSHR{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3671888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrshr(CurrentCond(),
3671988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
3672088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
3672188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rm),
3672288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm);
3672388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3672488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3672588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
3672688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800350
3672788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3672888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3672988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3673088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3673188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3673288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3673388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3673488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3673588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3673688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3673788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3673888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3673988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3674088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
3674188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3674288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3674388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3674488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
3674588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
3674688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3674788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3674888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3674988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
3675088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3675188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3675288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      (dt.IsSize(64) ? 64
3675388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     : (dt.GetSize() * 2)) -
3675488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6;
36755d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VRSRA{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3675688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrsra(CurrentCond(),
3675788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
3675888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
3675988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rm),
3676088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm);
3676188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3676288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3676388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3676488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3676588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3676688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3676788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3676888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3676988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000400: {
3677088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef800450
3677188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00380080) {
3677288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3677388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800450
3677488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000100) {
3677588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3677688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800450
3677788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000200) {
3677888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    default: {
3677988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000020) {
3678088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000020: {
3678188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800470
3678288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0xd00) == 0x100) ||
3678388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xd00) == 0x500) ||
3678488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xd00) == 0x900) ||
3678588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xe00) == 0xe00)) {
3678688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3678788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3678888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3678988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode = (instr >> 8) & 0xf;
3679088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3679188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmvn::DecodeDt(cmode);
3679288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3679388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3679488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3679588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3679688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3679788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3679888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3679988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3680088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3680188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3680288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QOperand imm =
3680388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmvn::DecodeImmediate(
3680488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3680588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3680688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3680788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
36808d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3680988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmvn(CurrentCond(),
3681088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3681188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3681288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3681388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3681488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3681588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3681688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x920) == 0x100) ||
3681788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x520) == 0x100) ||
3681888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x820) == 0x20) ||
3681988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x420) == 0x20) ||
3682088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x220) == 0x20) ||
3682188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x120) == 0x120)) {
3682288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3682388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3682488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3682588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode =
3682688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0xf) |
3682788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 1) & 0x10);
3682888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3682988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeDt(cmode);
3683088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3683188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3683288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3683388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3683488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3683588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3683688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3683788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3683888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3683988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3684088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QOperand imm =
3684188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeImmediate(
3684288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3684388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3684488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3684588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
36846d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3684788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmov(CurrentCond(),
3684888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3684988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3685088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3685188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3685288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3685388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3685488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3685588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3685688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3685788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3685888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3685988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
3686088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800550
3686188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000020) {
3686288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3686388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800550
3686488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x100) == 0x0) ||
3686588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc00) == 0xc00)) {
3686688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3686788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3686888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3686988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned cmode = (instr >> 8) & 0xf;
3687088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3687188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVorr::DecodeDt(cmode);
3687288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3687388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3687488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3687588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3687688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3687788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3687888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3687988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3688088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3688188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3688288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QOperand imm =
3688388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVorr::DecodeImmediate(
3688488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              cmode,
3688588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr & 0xf) |
3688688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 12) & 0x70) |
3688788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 21) & 0x80));
36888d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VORR{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3688988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vorr(CurrentCond(),
3689088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3689188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3689288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3689388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3689488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3689588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3689688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000020: {
3689788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800570
3689888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x100) == 0x0) ||
3689988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr & 0xc00) == 0xc00)) {
3690088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3690188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3690288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3690388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned cmode = (instr >> 8) & 0xf;
3690488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3690588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVbic::DecodeDt(cmode);
3690688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3690788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3690888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3690988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3691088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3691188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3691288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3691388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3691488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3691588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3691688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QOperand imm =
3691788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ImmediateVbic::DecodeImmediate(
3691888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              cmode,
3691988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr & 0xf) |
3692088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 12) & 0x70) |
3692188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 21) & 0x80));
36922d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VBIC{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3692388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vbic(CurrentCond(),
3692488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3692588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3692688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3692788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3692888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3692988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3693088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3693188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3693288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3693388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3693488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3693588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3693688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            default: {
3693788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00000300) {
3693888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3693988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800450
3694088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x10000000) == 0x10000000) {
3694188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380080) == 0x0)) {
3694288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3694388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3694488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3694588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt = Dt_L_imm6_4_Decode(
3694688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 19) & 0x7) |
3694788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 4) & 0x8));
3694888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
3694988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3695088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3695188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3695288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
3695388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3695488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3695588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3695688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
3695788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
3695888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
3695988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3696088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3696188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3696288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
3696388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
3696488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm =
3696588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        (dt.IsSize(64) ? 64
3696688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       : (dt.GetSize() * 2)) -
3696788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm6;
36968d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VSRI{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3696988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vsri(CurrentCond(),
3697088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
3697188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
3697288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rm),
3697388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         imm);
3697488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
3697588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3697688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3697788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3697888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3697988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000100: {
3698088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800550
3698188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x10000000) {
3698288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3698388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800550
3698488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380080) == 0x0)) {
3698588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3698688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3698788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3698888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt = Dt_L_imm6_3_Decode(
3698988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 19) & 0x7) |
3699088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 4) & 0x8));
3699188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3699288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3699388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3699488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3699588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3699688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3699788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3699888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3699988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3700088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3700188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
3700288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3700388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3700488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3700588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3700688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
3700788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3700888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm =
3700988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm6 -
3701088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (dt.IsSize(64) ? 0 : dt.GetSize());
37011d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSHL{<c>}{<q>}.I<size> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3701288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vshl(CurrentCond(),
3701388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3701488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3701588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rm),
3701688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3701788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3701888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3701988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x10000000: {
3702088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xff800550
3702188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380080) == 0x0)) {
3702288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3702388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3702488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3702588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt = Dt_L_imm6_4_Decode(
3702688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 19) & 0x7) |
3702788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ((instr >> 4) & 0x8));
3702888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3702988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3703088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3703188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3703288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr >> 12) & 1) != 0) {
3703388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3703488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3703588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3703688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3703788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 22, 12);
3703888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
3703988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3704088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3704188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3704288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3704388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
3704488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3704588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm =
3704688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm6 -
3704788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          (dt.IsSize(64) ? 0 : dt.GetSize());
37048d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VSLI{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3704988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vsli(CurrentCond(),
3705088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
3705188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
3705288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rm),
3705388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
3705488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3705588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3705688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3705788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3705888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3705988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000200: {
3706088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800650
3706188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3706288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3706388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3706488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3706588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3706688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_2_Decode(((instr >> 19) & 0x7) |
3706788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3706888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3706988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3707088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3707188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3707288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3707388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3707488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
3707588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3707688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3707788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3707888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
3707988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
3708088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3708188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3708288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3708388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
3708488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3708588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3708688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
37087d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VQSHLU{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3708888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vqshlu(CurrentCond(),
3708988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
3709088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
3709188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rm),
3709288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         imm);
3709388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3709488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3709588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000300: {
3709688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800750
3709788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0x380080) == 0x0)) {
3709888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3709988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3710088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3710188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
3710288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
3710388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             ((instr >> 4) &
3710488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              0x8),
3710588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 28) & 0x1);
3710688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
3710788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3710888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3710988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3711088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
3711188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3711288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3711388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3711488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
3711588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
3711688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3711788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
3711888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3711988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
3712088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm6 = (instr >> 16) & 0x3f;
3712188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm =
3712288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
37123d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VQSHL{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3712488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vqshl(CurrentCond(),
3712588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
3712688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
3712788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rm),
3712888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm);
3712988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3713088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3713188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3713288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3713388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
3713488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3713588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3713688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3713788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000800: {
3713888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef800850
3713988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000080) {
3714088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3714188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800850
3714288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00380000) {
3714388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3714488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800850
3714588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000100) {
3714688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3714788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800850
3714888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000200) {
3714988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3715088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000020) {
3715188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000020: {
3715288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef800870
3715388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0xd00) == 0x100) ||
3715488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0xd00) == 0x500) ||
3715588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0xd00) == 0x900) ||
3715688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0xe00) == 0xe00)) {
3715788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3715888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3715988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3716088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned cmode =
3716188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 8) & 0xf;
3716288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3716388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ImmediateVmvn::DecodeDt(
3716488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      cmode);
3716588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3716688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3716788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3716888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3716988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3717088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3717188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3717288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3717388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3717488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3717588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3717688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3717788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3717888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QOperand imm = ImmediateVmvn::
3717988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DecodeImmediate(cmode,
3718088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  (instr &
3718188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf) |
3718288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3718388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        12) &
3718488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x70) |
3718588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3718688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        21) &
3718788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x80));
37188d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3718988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmvn(CurrentCond(),
3719088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   dt,
3719188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rd),
3719288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   imm);
3719388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3719488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3719588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            default: {
3719688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x920) == 0x100) ||
3719788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x520) == 0x100) ||
3719888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x820) == 0x20) ||
3719988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x420) == 0x20) ||
3720088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x220) == 0x20) ||
3720188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x120) == 0x120)) {
3720288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3720388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3720488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3720588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned cmode =
3720688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 8) & 0xf) |
3720788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 1) & 0x10);
3720888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3720988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ImmediateVmov::DecodeDt(
3721088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      cmode);
3721188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3721288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3721388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3721488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3721588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3721688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3721788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3721888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3721988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3722088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3722188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3722288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3722388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3722488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QOperand imm = ImmediateVmov::
3722588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DecodeImmediate(cmode,
3722688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  (instr &
3722788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf) |
3722888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3722988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        12) &
3723088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x70) |
3723188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3723288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        21) &
3723388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x80));
37234d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3723588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmov(CurrentCond(),
3723688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   dt,
3723788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rd),
3723888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   imm);
3723988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3724088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3724188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3724288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3724388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3724488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3724588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3724688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3724788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
3724888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800950
3724988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000020) {
3725088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3725188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800950
3725288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x100) == 0x0) ||
3725388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xc00) == 0xc00)) {
3725488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3725588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3725688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3725788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode = (instr >> 8) & 0xf;
3725888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3725988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVorr::DecodeDt(cmode);
3726088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3726188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3726288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3726388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3726488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3726588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3726688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3726788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3726888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3726988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3727088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QOperand imm =
3727188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVorr::DecodeImmediate(
3727288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3727388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3727488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3727588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
37276d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VORR{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3727788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vorr(CurrentCond(),
3727888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3727988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3728088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3728188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3728288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3728388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3728488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000020: {
3728588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800970
3728688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x100) == 0x0) ||
3728788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0xc00) == 0xc00)) {
3728888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3728988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3729088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3729188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode = (instr >> 8) & 0xf;
3729288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3729388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVbic::DecodeDt(cmode);
3729488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3729588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3729688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3729788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3729888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3729988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3730088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3730188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3730288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3730388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3730488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QOperand imm =
3730588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVbic::DecodeImmediate(
3730688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3730788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3730888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3730988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
37310d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VBIC{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; T1 NOLINT(whitespace/line_length)
3731188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vbic(CurrentCond(),
3731288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3731388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3731488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3731588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3731688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3731788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3731888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3731988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3732088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3732188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3732288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3732388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3732488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
3732588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00000300) {
3732688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3732788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800850
3732888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x10000000) {
3732988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000000: {
3733088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800850
3733188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3733288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3733388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3733488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3733588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt = Dt_imm6_3_Decode(
3733688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              (instr >> 19) & 0x7);
3733788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3733888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3733988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3734088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3734188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3734288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3734388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3734488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3734588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3734688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3734788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3734888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3734988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3735088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
37351d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VRSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3735288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vrshrn(CurrentCond(),
3735388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
3735488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 DRegister(rd),
3735588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 QRegister(rm),
3735688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 imm);
3735788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3735888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3735988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x10000000: {
3736088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xff800850
3736188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x380000) == 0x0)) {
3736288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3736388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3736488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3736588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3736688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              Dt_imm6_2_Decode((instr >> 19) &
3736788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x7,
3736888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               (instr >> 28) &
3736988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0x1);
3737088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3737188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3737288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3737388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3737488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3737588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractDRegister(instr, 22, 12);
3737688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if ((instr & 1) != 0) {
3737788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3737888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3737988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3738088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rm =
3738188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 5, 0);
3738288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm6 = (instr >> 16) & 0x3f;
3738388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          uint32_t imm = dt.GetSize() - imm6;
37384d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VQRSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3738588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vqrshrun(CurrentCond(),
3738688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   dt,
3738788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   DRegister(rd),
3738888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rm),
3738988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   imm);
3739088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3739188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3739288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3739388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3739488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3739588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000100: {
3739688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800950
3739788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (((instr & 0x380000) == 0x0)) {
3739888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3739988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3740088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3740188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DataType dt =
3740288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          Dt_imm6_1_Decode((instr >> 19) & 0x7,
3740388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 28) & 0x1);
3740488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if (dt.Is(kDataTypeValueInvalid)) {
3740588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3740688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3740788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3740888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rd =
3740988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractDRegister(instr, 22, 12);
3741088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      if ((instr & 1) != 0) {
3741188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedT32(instr);
3741288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        return;
3741388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3741488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      unsigned rm =
3741588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          ExtractQRegister(instr, 5, 0);
3741688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm6 = (instr >> 16) & 0x3f;
3741788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      uint32_t imm = dt.GetSize() - imm6;
37418d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                      // VQRSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; T1 NOLINT(whitespace/line_length)
3741988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      vqrshrn(CurrentCond(),
3742088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
3742188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rd),
3742288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rm),
3742388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
3742488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3742588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
374264339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
3742788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3742888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3742988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3743088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3743188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3743288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3743388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3743488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
374354339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3743688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3743788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3743888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3743988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3744088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3744188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        case 0x00000c00: {
3744288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // 0xef800c50
3744388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          switch (instr & 0x00000080) {
3744488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            case 0x00000000: {
3744588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // 0xef800c50
3744688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (instr & 0x00200000) {
3744788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x00000000: {
3744888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // 0xef800c50
3744988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  switch (instr & 0x00180000) {
3745088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    case 0x00000000: {
3745188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      // 0xef800c50
3745288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      switch (instr & 0x00000300) {
3745388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000200: {
3745488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800e50
3745588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x920) == 0x100) ||
3745688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x520) == 0x100) ||
3745788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x820) == 0x20) ||
3745888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x420) == 0x20) ||
3745988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x220) == 0x20) ||
3746088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x120) == 0x120)) {
3746188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3746288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3746388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3746488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode =
3746588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0xf) |
3746688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 1) & 0x10);
3746788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3746888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeDt(cmode);
3746988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3747088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3747188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3747288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3747388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3747488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3747588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3747688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3747788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3747888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3747988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QOperand imm =
3748088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeImmediate(
3748188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3748288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3748388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3748488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
37485d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3748688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmov(CurrentCond(),
3748788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3748888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3748988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3749088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3749188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3749288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        case 0x00000300: {
3749388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          // 0xef800f50
3749488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr & 0x920) == 0x100) ||
3749588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x520) == 0x100) ||
3749688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x820) == 0x20) ||
3749788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x420) == 0x20) ||
3749888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x220) == 0x20) ||
3749988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr & 0x120) == 0x120)) {
3750088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3750188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3750288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3750388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned cmode =
3750488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 8) & 0xf) |
3750588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr >> 1) & 0x10);
3750688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DataType dt =
3750788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeDt(cmode);
3750888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (dt.Is(kDataTypeValueInvalid)) {
3750988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3751088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3751188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3751288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          if (((instr >> 12) & 1) != 0) {
3751388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedT32(instr);
3751488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            return;
3751588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3751688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          unsigned rd =
3751788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ExtractQRegister(instr, 22, 12);
3751888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QOperand imm =
3751988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ImmediateVmov::DecodeImmediate(
3752088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  cmode,
3752188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr & 0xf) |
3752288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 12) & 0x70) |
3752388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 21) & 0x80));
37524d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                          // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3752588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          vmov(CurrentCond(),
3752688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               dt,
3752788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               QRegister(rd),
3752888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               imm);
3752988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3753088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3753188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        default: {
3753288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          switch (instr & 0x00000020) {
3753388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            case 0x00000020: {
3753488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              // 0xef800c70
3753588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              switch (instr & 0x00000f20) {
3753688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000000: {
3753788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c50
3753888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3753988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3754088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3754188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3754288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3754388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3754488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3754588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3754688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3754788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3754888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3754988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3755088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3755188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3755288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3755388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3755488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3755588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3755688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3755788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3755888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3755988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3756088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3756188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3756288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3756388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3756488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3756588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3756688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3756788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3756888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3756988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3757088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3757188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3757288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3757388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3757488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3757588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3757688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3757788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3757888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3757988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3758088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37581d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3758288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3758388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3758488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3758588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3758688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3758788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3758888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000020: {
3758988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c70
3759088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3759188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3759288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3759388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3759488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3759588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3759688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3759788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3759888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3759988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3760088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3760188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3760288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3760388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3760488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3760588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3760688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3760788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3760888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3760988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3761088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3761188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3761288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3761388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3761488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3761588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3761688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3761788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3761888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3761988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3762088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmvn::
3762188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3762288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3762388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3762488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3762588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3762688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3762788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37628d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3762988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3763088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3763188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3763288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3763388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3763488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3763588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000200: {
3763688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e50
3763788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3763888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3763988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3764088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3764188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3764288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3764388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3764488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3764588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3764688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3764788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3764888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3764988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3765088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3765188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3765288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3765388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3765488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3765588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3765688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3765788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3765888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3765988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3766088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3766188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3766288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3766388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3766488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3766588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3766688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3766788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3766888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3766988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3767088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3767188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3767288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3767388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3767488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3767588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3767688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3767788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3767888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3767988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37680d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3768188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3768288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3768388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3768488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3768588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3768688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3768788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000220: {
3768888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e70
3768988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3769088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3769188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3769288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3769388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3769488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3769588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3769688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3769788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3769888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3769988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3770088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3770188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3770288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3770388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3770488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3770588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3770688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3770788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3770888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3770988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3771088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3771188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3771288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3771388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3771488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3771588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3771688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3771788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3771888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3771988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmvn::
3772088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3772188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3772288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3772388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3772488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3772588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3772688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37727d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3772888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3772988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3773088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3773188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3773288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3773388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3773488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000400: {
3773588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c50
3773688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3773788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3773888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3773988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3774088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3774188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3774288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3774388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3774488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3774588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3774688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3774788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3774888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3774988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3775088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3775188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3775288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3775388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3775488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3775588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3775688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3775788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3775888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3775988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3776088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3776188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3776288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3776388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3776488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3776588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3776688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3776788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3776888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3776988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3777088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3777188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3777288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3777388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3777488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3777588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3777688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3777788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3777888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37779d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3778088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3778188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3778288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3778388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3778488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3778588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3778688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000420: {
3778788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c70
3778888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3778988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3779088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3779188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3779288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3779388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3779488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3779588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3779688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3779788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3779888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3779988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3780088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3780188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3780288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3780388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3780488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3780588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3780688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3780788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3780888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3780988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3781088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3781188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3781288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3781388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3781488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3781588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3781688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3781788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3781888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmvn::
3781988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3782088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3782188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3782288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3782388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3782488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3782588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37826d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3782788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3782888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3782988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3783088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3783188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3783288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3783388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000600: {
3783488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e50
3783588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3783688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3783788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3783888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3783988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3784088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3784188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3784288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3784388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3784488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3784588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3784688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3784788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3784888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3784988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3785088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3785188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3785288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3785388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3785488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3785588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3785688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3785788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3785888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3785988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3786088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3786188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3786288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3786388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3786488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3786588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3786688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3786788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3786888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3786988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3787088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3787188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3787288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3787388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3787488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3787588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3787688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3787788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37878d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3787988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3788088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3788188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3788288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3788388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3788488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3788588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000620: {
3788688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e70
3788788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3788888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3788988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3789088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3789188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3789288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3789388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3789488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3789588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3789688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3789788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3789888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3789988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3790088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3790188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3790288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3790388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3790488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3790588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3790688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3790788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3790888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3790988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3791088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3791188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3791288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3791388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3791488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3791588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3791688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3791788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmvn::
3791888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3791988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3792088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3792188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3792288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3792388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3792488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37925d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3792688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3792788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3792888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3792988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3793088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3793188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3793288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000800: {
3793388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c50
3793488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3793588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3793688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3793788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3793888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3793988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3794088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3794188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3794288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3794388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3794488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3794588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3794688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3794788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3794888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3794988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3795088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3795188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3795288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3795388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3795488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3795588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3795688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3795788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3795888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3795988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3796088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3796188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3796288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3796388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3796488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3796588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3796688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3796788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3796888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3796988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3797088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3797188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3797288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3797388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3797488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3797588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3797688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
37977d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3797888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3797988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3798088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3798188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3798288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3798388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3798488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000820: {
3798588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c70
3798688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3798788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3798888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3798988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3799088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3799188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3799288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3799388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3799488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3799588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3799688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3799788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3799888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3799988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3800088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3800188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3800288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3800388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3800488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3800588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3800688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3800788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3800888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3800988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3801088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3801188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3801288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3801388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3801488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3801588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3801688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmvn::
3801788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3801888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3801988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3802088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3802188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3802288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3802388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38024d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3802588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3802688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3802788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3802888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3802988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3803088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3803188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000a00: {
3803288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e50
3803388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3803488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3803588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3803688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3803788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3803888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3803988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3804088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3804188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3804288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3804388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3804488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3804588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3804688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3804788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3804888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3804988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3805088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3805188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3805288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3805388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3805488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3805588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3805688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3805788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3805888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3805988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3806088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3806188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3806288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3806388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3806488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3806588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3806688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3806788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3806888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3806988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3807088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3807188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3807288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3807388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3807488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3807588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38076d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3807788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3807888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3807988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3808088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3808188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3808288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3808388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000a20: {
3808488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e70
3808588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3808688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3808788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3808888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3808988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3809088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3809188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3809288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3809388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3809488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3809588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3809688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3809788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3809888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3809988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3810088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3810188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3810288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3810388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3810488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3810588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3810688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3810788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3810888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3810988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3811088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3811188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3811288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3811388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3811488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3811588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmvn::
3811688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3811788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3811888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3811988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3812088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3812188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3812288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38123d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3812488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3812588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3812688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3812788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3812888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3812988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3813088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000c00: {
3813188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c50
3813288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3813388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3813488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3813588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3813688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3813788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3813888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3813988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3814088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3814188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3814288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3814388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3814488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3814588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3814688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3814788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3814888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3814988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3815088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3815188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3815288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3815388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3815488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3815588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3815688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3815788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3815888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3815988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3816088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3816188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3816288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3816388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3816488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3816588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3816688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3816788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3816888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3816988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3817088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3817188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3817288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3817388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3817488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38175d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3817688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3817788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3817888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3817988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3818088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3818188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3818288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000c20: {
3818388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800c70
3818488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3818588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3818688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3818788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3818888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3818988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3819088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3819188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3819288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3819388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3819488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3819588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3819688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3819788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3819888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3819988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3820088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3820188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3820288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3820388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3820488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3820588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3820688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3820788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3820888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3820988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3821088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3821188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3821288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3821388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3821488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmvn::
3821588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3821688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3821788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3821888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3821988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3822088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3822188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38222d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3822388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3822488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3822588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3822688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3822788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3822888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3822988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000d00: {
3823088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800d50
3823188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3823288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3823388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3823488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3823588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3823688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3823788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3823888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3823988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3824088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3824188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3824288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3824388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3824488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3824588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3824688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3824788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3824888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3824988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3825088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3825188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3825288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3825388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3825488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3825588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3825688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3825788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3825888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3825988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3826088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3826188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3826288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3826388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3826488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3826588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3826688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3826788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3826888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3826988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3827088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3827188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3827288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3827388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38274d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3827588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3827688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3827788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3827888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3827988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3828088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3828188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000d20: {
3828288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800d70
3828388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0xd00) ==
3828488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3828588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3828688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x500) ||
3828788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xd00) ==
3828888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x900) ||
3828988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0xe00) ==
3829088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0xe00)) {
3829188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3829288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3829388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3829488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3829588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      (instr >> 8) & 0xf;
3829688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3829788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmvn::DecodeDt(
3829888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3829988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3830088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3830188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3830288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3830388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3830488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3830588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3830688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3830788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3830888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3830988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3831088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3831188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3831288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3831388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmvn::
3831488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3831588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3831688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3831788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3831888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3831988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3832088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38321d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3832288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmvn(CurrentCond(),
3832388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3832488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3832588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3832688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3832788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3832888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000e00: {
3832988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e50
3833088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3833188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3833288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3833388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3833488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3833588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3833688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3833788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3833888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3833988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3834088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3834188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3834288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3834388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3834488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3834588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3834688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3834788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3834888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3834988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3835088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3835188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3835288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3835388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3835488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3835588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3835688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3835788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3835888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3835988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3836088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3836188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3836288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3836388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3836488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3836588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3836688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3836788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3836888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3836988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3837088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3837188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3837288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38373d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3837488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3837588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3837688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3837788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3837888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3837988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3838088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000e20: {
3838188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800e70
3838288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3838388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3838488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3838588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3838688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3838788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3838888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3838988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3839088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3839188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3839288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3839388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3839488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3839588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3839688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3839788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3839888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3839988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3840088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3840188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3840288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3840388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3840488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3840588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3840688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3840788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3840888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3840988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3841088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3841188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3841288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3841388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3841488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3841588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3841688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3841788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3841888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3841988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3842088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3842188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3842288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3842388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3842488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38425d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3842688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3842788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3842888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3842988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3843088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3843188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
3843288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                case 0x00000f00: {
3843388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  // 0xef800f50
3843488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr & 0x920) ==
3843588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3843688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x520) ==
3843788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x100) ||
3843888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x820) ==
3843988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3844088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x420) ==
3844188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3844288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x220) ==
3844388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x20) ||
3844488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr & 0x120) ==
3844588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       0x120)) {
3844688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3844788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3844888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3844988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned cmode =
3845088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 8) & 0xf) |
3845188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ((instr >> 1) & 0x10);
3845288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DataType dt =
3845388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ImmediateVmov::DecodeDt(
3845488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode);
3845588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (dt.Is(
3845688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          kDataTypeValueInvalid)) {
3845788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3845888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3845988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3846088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  if (((instr >> 12) & 1) !=
3846188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      0) {
3846288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    UnallocatedT32(instr);
3846388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    return;
3846488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  }
3846588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  unsigned rd =
3846688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      ExtractQRegister(instr,
3846788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       22,
3846888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       12);
3846988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  QOperand imm = ImmediateVmov::
3847088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DecodeImmediate(
3847188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          cmode,
3847288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          (instr & 0xf) |
3847388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 12) &
3847488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x70) |
3847588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                              ((instr >> 21) &
3847688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               0x80));
38477d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                                  // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3847888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  vmov(CurrentCond(),
3847988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       dt,
3848088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       QRegister(rd),
3848188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       imm);
3848288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3848388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                }
384844339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                                default:
3848588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  UnallocatedT32(instr);
3848688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  break;
3848788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3848888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3848988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3849088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            default: {
3849188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr & 0x920) == 0x100) ||
3849288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x520) == 0x100) ||
3849388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x820) == 0x20) ||
3849488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x420) == 0x20) ||
3849588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x220) == 0x20) ||
3849688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr & 0x120) == 0x120)) {
3849788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3849888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3849988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3850088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned cmode =
3850188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 8) & 0xf) |
3850288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 1) & 0x10);
3850388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DataType dt =
3850488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ImmediateVmov::DecodeDt(
3850588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      cmode);
3850688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (dt.Is(
3850788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      kDataTypeValueInvalid)) {
3850888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3850988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3851088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3851188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              if (((instr >> 12) & 1) != 0) {
3851288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                UnallocatedT32(instr);
3851388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                return;
3851488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              }
3851588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              unsigned rd =
3851688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ExtractQRegister(instr,
3851788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   22,
3851888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   12);
3851988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QOperand imm = ImmediateVmov::
3852088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DecodeImmediate(cmode,
3852188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                  (instr &
3852288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf) |
3852388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3852488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        12) &
3852588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x70) |
3852688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                      ((instr >>
3852788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                        21) &
3852888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                       0x80));
38529d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                              // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; T1 NOLINT(whitespace/line_length)
3853088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              vmov(CurrentCond(),
3853188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   dt,
3853288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   QRegister(rd),
3853388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   imm);
3853488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              break;
3853588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
3853688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
3853788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          break;
3853888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
3853988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
3854088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3854188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
385424339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                    default:
3854388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3854488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      break;
3854588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3854688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3854788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3854888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default: {
3854988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 0x00000200) == 0x00000200) {
3855088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x200000) == 0x0)) {
3855188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3855288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3855388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3855488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt1 = Dt_op_U_1_Decode1(
3855588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 28) & 0x1) |
3855688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 7) & 0x2));
3855788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt1.Is(kDataTypeValueInvalid)) {
3855888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3855988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3856088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3856188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt2 = Dt_op_U_1_Decode2(
3856288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 28) & 0x1) |
3856388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 7) & 0x2));
3856488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt2.Is(kDataTypeValueInvalid)) {
3856588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3856688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3856788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3856888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
3856988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3857088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3857188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3857288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
3857388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
3857488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
3857588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedT32(instr);
3857688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
3857788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
3857888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
3857988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t fbits =
3858088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        64 - ((instr >> 16) & 0x3f);
38581d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VCVT{<c>}{<q>}.<dt>.<dt> <Qd>, <Qm>, #<fbits> ; T1 NOLINT(whitespace/line_length)
3858288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvt(CurrentCond(),
3858388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt1,
3858488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt2,
3858588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
3858688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rm),
3858788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         fbits);
3858888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  } else {
3858988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedT32(instr);
3859088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
3859188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
3859288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
3859388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
3859488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3859588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
385964339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                            default:
3859788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedT32(instr);
3859888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              break;
3859988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
3860088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          break;
3860188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
3860288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3860388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      break;
3860488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3860588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3860688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  break;
3860788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3860888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3860988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              break;
3861088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
3861188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
3861288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          break;
3861388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
3861488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
3861588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      break;
3861688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
3861788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
3861888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}  // NOLINT(readability/fn_size)
3861988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
3862088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid Disassembler::DecodeA32(uint32_t instr) {
386211075d15db3f11224e70960ed653462064018a001Vincent Belliard  A32CodeAddressIncrementer incrementer(&code_address_);
3862288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if ((instr & 0xf0000000) == 0xf0000000) {
3862388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (instr & 0x0e000000) {
3862488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x00000000: {
3862588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0xf0000000
3862688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01f10020) {
3862788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01000000: {
3862888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf1000000
3862988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x000e0000) {
3863088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00020000: {
3863188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf1020000
3863288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x000001c0) == 0x00000000) {
3863388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnimplementedA32("CPS", instr);
3863488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
3863588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3863688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3863788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3863888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3863988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00080000: {
3864088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf1080000
3864188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x0000001f) == 0x00000000) {
3864288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnimplementedA32("CPSIE", instr);
3864388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
3864488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3864588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3864688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3864788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3864888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x000a0000: {
3864988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf10a0000
3865088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("CPSIE", instr);
3865188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3865288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3865388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x000c0000: {
3865488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf10c0000
3865588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x0000001f) == 0x00000000) {
3865688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnimplementedA32("CPSID", instr);
3865788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
3865888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3865988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3866088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3866188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3866288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x000e0000: {
3866388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf10e0000
3866488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("CPSID", instr);
3866588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3866688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
386674339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
3866888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
3866988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3867088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
3867188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
3867288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
3867388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01010000: {
3867488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf1010000
3867588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if ((instr & 0x000000d0) == 0x00000000) {
3867688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnimplementedA32("SETEND", instr);
3867788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            } else {
3867888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
3867988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
3868088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
3868188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
386824339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard          default:
3868388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnallocatedA32(instr);
3868488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
3868588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
3868688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
3868788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
3868888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x02000000: {
3868988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0xf2000000
3869088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x00800010) {
3869188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
3869288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf2000000
3869388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000f40) {
3869488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
3869588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000000
3869688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3869788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3869888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3869988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3870088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3870188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3870288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3870388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3870488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3870588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VHADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3870688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vhadd(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3870788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3870888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3870988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000040: {
3871088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000040
3871188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3871288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3871388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3871488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3871588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3871688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3871788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3871888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3871988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3872088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3872188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3872288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3872388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3872488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3872588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3872688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3872788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3872888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3872988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3873088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3873188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3873288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VHADD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3873388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vhadd(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3873488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3873588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3873688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000100: {
3873788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000100
3873888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3873988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3874088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3874188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3874288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3874388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3874488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3874588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3874688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3874788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VRHADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3874888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vrhadd(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3874988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3875088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3875188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000140: {
3875288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000140
3875388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3875488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3875588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3875688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3875788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3875888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3875988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3876088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3876188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3876288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3876388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3876488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3876588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3876688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3876788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3876888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3876988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3877088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3877188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3877288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3877388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3877488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VRHADD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3877588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vrhadd(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3877688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3877788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3877888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000200: {
3877988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000200
3878088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3878188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3878288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3878388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3878488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3878588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3878688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3878788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3878888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3878988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VHSUB{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3879088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vhsub(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3879188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3879288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3879388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000240: {
3879488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000240
3879588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3879688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3879788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3879888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3879988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3880088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3880188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3880288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3880388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3880488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3880588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3880688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3880788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3880888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3880988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3881088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3881188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3881288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3881388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3881488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3881588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3881688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VHSUB{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3881788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vhsub(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3881888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3881988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3882088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000300: {
3882188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000300
3882288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3882388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3882488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3882588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3882688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3882788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3882888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3882988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3883088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3883188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VCGT{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3883288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vcgt(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3883388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3883488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3883588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000340: {
3883688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000340
3883788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3883888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3883988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3884088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3884188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3884288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3884388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3884488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3884588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3884688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3884788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3884888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3884988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3885088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3885188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3885288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3885388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3885488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3885588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3885688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3885788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3885888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VCGT{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3885988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vcgt(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3886088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3886188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3886288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000400: {
3886388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000400
3886488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
3886588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3886688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3886788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3886888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3886988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3887088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3887188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3887288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3887388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VSHL{<c>}{<q>}.<dt> {<Dd>}, <Dm>, <Dn> ; A1
3887488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vshl(al, dt, DRegister(rd), DRegister(rm), DRegister(rn));
3887588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3887688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3887788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000440: {
3887888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000440
3887988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
3888088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3888188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3888288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3888388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3888488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3888588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3888688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3888788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3888888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3888988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3889088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3889188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3889288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3889388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3889488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3889588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3889688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3889788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3889888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3889988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3890088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VSHL{<c>}{<q>}.<dt> {<Qd>}, <Qm>, <Qn> ; A1
3890188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vshl(al, dt, QRegister(rd), QRegister(rm), QRegister(rn));
3890288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3890388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3890488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000500: {
3890588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000500
3890688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
3890788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3890888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3890988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3891088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3891188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3891288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3891388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3891488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3891588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VRSHL{<c>}{<q>}.<dt> {<Dd>}, <Dm>, <Dn> ; A1
3891688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vrshl(al, dt, DRegister(rd), DRegister(rm), DRegister(rn));
3891788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3891888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3891988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000540: {
3892088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000540
3892188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
3892288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3892388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3892488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3892588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3892688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3892788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3892888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3892988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3893088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3893188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3893288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3893388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3893488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3893588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3893688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3893788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3893888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3893988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3894088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3894188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3894288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VRSHL{<c>}{<q>}.<dt> {<Qd>}, <Qm>, <Qn> ; A1
3894388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vrshl(al, dt, QRegister(rd), QRegister(rm), QRegister(rn));
3894488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3894588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3894688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000600: {
3894788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000600
3894888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3894988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3895088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3895188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3895288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3895388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3895488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3895588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3895688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3895788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VMAX{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3895888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vmax(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3895988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3896088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3896188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000640: {
3896288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000640
3896388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3896488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3896588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3896688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3896788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3896888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3896988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3897088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3897188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3897288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3897388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3897488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3897588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3897688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3897788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3897888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3897988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3898088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3898188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3898288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3898388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3898488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VMAX{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3898588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vmax(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3898688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3898788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3898888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000700: {
3898988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000700
3899088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3899188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3899288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3899388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3899488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3899588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3899688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3899788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3899888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3899988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VABD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3900088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vabd(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3900188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3900288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3900388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000740: {
3900488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000740
3900588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3900688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3900788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3900888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3900988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3901088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3901188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3901288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3901388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3901488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3901588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3901688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3901788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3901888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3901988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3902088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3902188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3902288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3902388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3902488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3902588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3902688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VABD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3902788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vabd(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3902888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3902988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3903088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000800: {
3903188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000800
3903288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
3903388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3903488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000800
3903588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_2_Decode((instr >> 20) & 0x3);
3903688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3903788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3903888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3903988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3904088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3904188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3904288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3904388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3904488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vadd(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3904588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3904688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3904788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3904888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000800
3904988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_2_Decode((instr >> 20) & 0x3);
3905088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3905188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3905288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3905388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3905488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3905588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3905688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3905788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSUB{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3905888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vsub(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3905988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3906088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3906188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3906288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3906388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3906488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000840: {
3906588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000840
3906688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
3906788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3906888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000840
3906988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_2_Decode((instr >> 20) & 0x3);
3907088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3907188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3907288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3907388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3907488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3907588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3907688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3907788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3907888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3907988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3908088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3908188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3908288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3908388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3908488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3908588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3908688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3908788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3908888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3908988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VADD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3909088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vadd(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3909188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3909288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3909388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3909488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000840
3909588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_2_Decode((instr >> 20) & 0x3);
3909688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3909788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3909888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3909988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3910088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3910188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3910288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3910388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3910488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3910588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3910688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3910788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3910888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3910988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3911088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3911188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3911288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3911388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3911488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3911588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSUB{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3911688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vsub(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3911788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3911888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3911988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3912088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3912188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3912288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000900: {
3912388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000900
3912488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
3912588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3912688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000900
3912788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_10_Decode((instr >> 20) & 0x3);
3912888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3912988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3913088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3913188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3913288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3913388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3913488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3913588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMLA{<c>}{<q>}.<type><size> <Dd>, <Dn>, <Dm> ; A1
3913688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmla(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3913788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3913888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3913988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3914088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000900
3914188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_10_Decode((instr >> 20) & 0x3);
3914288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3914388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3914488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3914588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3914688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3914788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3914888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3914988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMLS{<c>}{<q>}.<type><size> <Dd>, <Dn>, <Dm> ; A1
3915088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmls(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3915188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3915288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3915388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3915488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3915588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3915688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000940: {
3915788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000940
3915888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
3915988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3916088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000940
3916188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_10_Decode((instr >> 20) & 0x3);
3916288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3916388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3916488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3916588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3916688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3916788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3916888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3916988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3917088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3917188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3917288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3917388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3917488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3917588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3917688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3917788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3917888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3917988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3918088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3918188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMLA{<c>}{<q>}.<type><size> <Qd>, <Qn>, <Qm> ; A1
3918288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmla(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3918388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3918488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3918588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3918688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000940
3918788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_10_Decode((instr >> 20) & 0x3);
3918888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3918988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3919088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3919188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3919288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3919388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3919488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3919588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3919688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3919788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3919888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3919988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3920088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3920188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3920288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3920388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3920488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3920588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3920688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3920788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMLS{<c>}{<q>}.<type><size> <Qd>, <Qn>, <Qm> ; A1
3920888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmls(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3920988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3921088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3921188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3921288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3921388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3921488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000a00: {
3921588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000a00
3921688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
3921788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3921888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3921988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3922088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3922188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3922288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3922388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3922488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3922588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VPMAX{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3922688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vpmax(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3922788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3922888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3922988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000b00: {
3923088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000b00
3923188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
3923288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3923388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000b00
3923488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
3923588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3923688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3923788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3923888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3923988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3924088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3924188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3924288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VQDMULH{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3924388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vqdmulh(al,
3924488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            dt,
3924588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DRegister(rd),
3924688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DRegister(rn),
3924788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DRegister(rm));
3924888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3924988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3925088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3925188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000b00
3925288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
3925388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3925488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3925588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3925688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3925788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3925888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3925988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3926088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VQRDMULH{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3926188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vqrdmulh(al,
3926288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
3926388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
3926488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
3926588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
3926688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3926788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3926888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3926988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3927088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3927188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000b40: {
3927288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000b40
3927388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
3927488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3927588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000b40
3927688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
3927788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3927888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3927988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3928088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3928188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3928288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3928388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3928488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3928588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3928688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3928788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3928888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3928988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3929088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3929188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3929288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3929388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3929488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3929588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3929688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VQDMULH{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3929788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vqdmulh(al,
3929888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            dt,
3929988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            QRegister(rd),
3930088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            QRegister(rn),
3930188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            QRegister(rm));
3930288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3930388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3930488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3930588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000b40
3930688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
3930788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3930888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3930988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3931088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3931188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3931288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3931388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3931488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3931588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3931688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3931788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3931888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3931988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3932088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3932188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3932288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3932388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3932488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3932588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3932688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VQRDMULH{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3932788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vqrdmulh(al,
3932888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
3932988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             QRegister(rd),
3933088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             QRegister(rn),
3933188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             QRegister(rm));
3933288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3933388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3933488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3933588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3933688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3933788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000c40: {
3933888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000c40
3933988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
3934088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3934188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000c40
3934288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("SHA1C", instr);
3934388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3934488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3934588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
3934688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2100c40
3934788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("SHA1P", instr);
3934888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3934988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3935088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
3935188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200c40
3935288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("SHA1M", instr);
3935388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3935488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3935588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00300000: {
3935688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2300c40
3935788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("SHA1SU0", instr);
3935888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3935988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3936088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3936188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000c40
3936288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("SHA256H", instr);
3936388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3936488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3936588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01100000: {
3936688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3100c40
3936788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("SHA256H2", instr);
3936888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3936988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3937088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
3937188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200c40
3937288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("SHA256SU1", instr);
3937388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3937488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
393754339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
3937688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
3937788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3937888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3937988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3938088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3938188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000d00: {
3938288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000d00
3938388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
3938488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3938588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000d00
3938688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3938788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3938888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3938988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VADD{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
3939088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vadd(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
3939188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3939288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3939388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
3939488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200d00
3939588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3939688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3939788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3939888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSUB{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
3939988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vsub(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
3940088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3940188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3940288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3940388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000d00
3940488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3940588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3940688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3940788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VPADD{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
3940888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vpadd(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
3940988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3941088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3941188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
3941288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200d00
3941388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3941488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3941588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3941688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VABD{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
3941788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vabd(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
3941888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3941988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
394204339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
3942188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
3942288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3942388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3942488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3942588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3942688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000d40: {
3942788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000d40
3942888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
3942988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3943088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000d40
3943188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3943288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3943388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3943488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3943588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3943688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3943788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3943888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3943988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3944088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3944188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3944288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3944388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3944488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3944588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3944688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VADD{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
3944788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vadd(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
3944888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3944988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3945088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
3945188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200d40
3945288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3945388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3945488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3945588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3945688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3945788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3945888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3945988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3946088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3946188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3946288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3946388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3946488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3946588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3946688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3946788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSUB{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
3946888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vsub(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
3946988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3947088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3947188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
3947288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200d40
3947388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3947488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3947588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3947688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3947788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3947888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3947988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3948088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3948188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3948288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3948388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3948488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3948588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3948688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3948788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3948888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VABD{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
3948988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vabd(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
3949088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3949188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
394924339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
3949388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
3949488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3949588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3949688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3949788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3949888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000e00: {
3949988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000e00
3950088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01200000) {
3950188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3950288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000e00
3950388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_sz_1_Decode((instr >> 20) & 0x1);
3950488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3950588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3950688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3950788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3950888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3950988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3951088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3951188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VCEQ{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A2
3951288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vceq(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3951388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3951488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3951588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3951688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000e00
3951788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x00100000) == 0x00000000) {
3951888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = ExtractDRegister(instr, 22, 12);
3951988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = ExtractDRegister(instr, 7, 16);
3952088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractDRegister(instr, 5, 0);
3952188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VCGE{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A2
3952288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vcge(al,
3952388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           F32,
3952488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rd),
3952588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rn),
3952688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rm));
3952788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
3952888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3952988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3953088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3953188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3953288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
3953388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200e00
3953488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x00100000) == 0x00000000) {
3953588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = ExtractDRegister(instr, 22, 12);
3953688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = ExtractDRegister(instr, 7, 16);
3953788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractDRegister(instr, 5, 0);
3953888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VCGT{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A2
3953988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vcgt(al,
3954088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           F32,
3954188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rd),
3954288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rn),
3954388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rm));
3954488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
3954588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3954688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3954788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3954888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
395494339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
3955088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
3955188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3955288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3955388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3955488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3955588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000e40: {
3955688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000e40
3955788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01200000) {
3955888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3955988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000e40
3956088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_sz_1_Decode((instr >> 20) & 0x1);
3956188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
3956288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3956388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3956488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3956588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3956688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3956788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3956888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3956988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3957088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3957188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3957288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3957388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3957488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3957588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3957688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3957788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3957888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3957988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3958088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VCEQ{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A2
3958188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vceq(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3958288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3958388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3958488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3958588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000e40
3958688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x00100000) == 0x00000000) {
3958788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 12) & 1) != 0) {
3958888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
3958988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
3959088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3959188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = ExtractQRegister(instr, 22, 12);
3959288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 16) & 1) != 0) {
3959388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
3959488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
3959588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3959688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = ExtractQRegister(instr, 7, 16);
3959788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((instr & 1) != 0) {
3959888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
3959988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
3960088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3960188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractQRegister(instr, 5, 0);
3960288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VCGE{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A2
3960388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vcge(al,
3960488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           F32,
3960588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rd),
3960688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rn),
3960788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rm));
3960888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
3960988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3961088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3961188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3961288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3961388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
3961488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200e40
3961588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x00100000) == 0x00000000) {
3961688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 12) & 1) != 0) {
3961788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
3961888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
3961988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3962088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = ExtractQRegister(instr, 22, 12);
3962188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 16) & 1) != 0) {
3962288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
3962388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
3962488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3962588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rn = ExtractQRegister(instr, 7, 16);
3962688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((instr & 1) != 0) {
3962788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
3962888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
3962988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3963088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractQRegister(instr, 5, 0);
3963188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VCGT{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A2
3963288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vcgt(al,
3963388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           F32,
3963488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rd),
3963588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rn),
3963688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rm));
3963788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
3963888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3963988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3964088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3964188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
396424339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
3964388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
3964488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3964588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3964688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3964788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3964888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000f00: {
3964988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000f00
3965088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
3965188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3965288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000f00
3965388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3965488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3965588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3965688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMAX{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
3965788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmax(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
3965888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3965988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3966088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
3966188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200f00
3966288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3966388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3966488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3966588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMIN{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
3966688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmin(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
3966788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3966888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3966988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3967088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000f00
3967188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3967288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3967388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3967488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VPMAX{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
3967588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vpmax(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
3967688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3967788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3967888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
3967988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200f00
3968088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3968188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3968288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3968388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VPMIN{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
3968488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vpmin(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
3968588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3968688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
396874339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
3968888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
3968988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3969088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3969188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3969288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3969388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000f40: {
3969488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000f40
3969588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
3969688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3969788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000f40
3969888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3969988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3970088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3970188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3970288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3970388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3970488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3970588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3970688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3970788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3970888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3970988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3971088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3971188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3971288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3971388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMAX{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
3971488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmax(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
3971588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3971688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3971788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
3971888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200f40
3971988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3972088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3972188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3972288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3972388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3972488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3972588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3972688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3972788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3972888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3972988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3973088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3973188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3973288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3973388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3973488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMIN{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
3973588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmin(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
3973688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3973788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
397384339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
3973988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
3974088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3974188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3974288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3974388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
397444339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
3974588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
3974688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3974788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
3974888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
3974988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
3975088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000010: {
3975188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf2000010
3975288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000f40) {
3975388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
3975488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000010
3975588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
3975688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3975788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3975888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3975988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3976088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3976188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
3976288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
3976388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
3976488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VQADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
3976588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vqadd(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
3976688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3976788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3976888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000040: {
3976988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000050
3977088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
3977188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
3977288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
3977388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3977488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3977588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3977688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
3977788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3977888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3977988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3978088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
3978188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
3978288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3978388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3978488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3978588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
3978688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
3978788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
3978888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
3978988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3979088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
3979188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VQADD{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
3979288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vqadd(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
3979388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3979488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3979588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000100: {
3979688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000110
3979788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
3979888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3979988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000110
3980088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3980188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3980288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3980388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VAND{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; A1
3980488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vand(al,
3980588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3980688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rd),
3980788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rn),
3980888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rm));
3980988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3981088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3981188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
3981288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2100110
3981388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3981488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3981588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3981688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VBIC{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; A1
3981788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vbic(al,
3981888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3981988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rd),
3982088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rn),
3982188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rm));
3982288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3982388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3982488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
3982588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200110
3982688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0x00000040) == 0x00000000) &&
3982788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((((Uint32((instr >> 7)) & Uint32(0x1)) << 4) |
3982888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (Uint32((instr >> 16)) & Uint32(0xf))) ==
3982988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         (((Uint32((instr >> 5)) & Uint32(0x1)) << 4) |
3983088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (Uint32(instr) & Uint32(0xf))))) {
3983188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = ExtractDRegister(instr, 22, 12);
3983288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractDRegister(instr, 7, 16);
3983388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VMOV{<c>}{<q>}{.<dt>} <Dd>, <Dm> ; A1
3983488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vmov(al,
3983588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           kDataTypeValueNone,
3983688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rd),
3983788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rm));
3983888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3983988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3984088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3984188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3984288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3984388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VORR{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; A1
3984488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vorr(al,
3984588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3984688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rd),
3984788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rn),
3984888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rm));
3984988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3985088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3985188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00300000: {
3985288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2300110
3985388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3985488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3985588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3985688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VORN{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; A1
3985788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vorn(al,
3985888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3985988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rd),
3986088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rn),
3986188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rm));
3986288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3986388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3986488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
3986588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000110
3986688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3986788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3986888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3986988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VEOR{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; A1
3987088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    veor(al,
3987188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3987288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rd),
3987388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rn),
3987488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rm));
3987588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3987688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3987788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01100000: {
3987888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3100110
3987988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3988088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3988188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3988288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VBSL{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; A1
3988388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vbsl(al,
3988488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3988588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rd),
3988688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rn),
3988788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rm));
3988888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3988988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3989088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
3989188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200110
3989288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3989388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3989488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3989588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VBIT{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; A1
3989688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vbit(al,
3989788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3989888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rd),
3989988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rn),
3990088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rm));
3990188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3990288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3990388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01300000: {
3990488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3300110
3990588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
3990688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
3990788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
3990888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VBIF{<c>}{<q>}{.<dt>} {<Dd>}, <Dn>, <Dm> ; A1
3990988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vbif(al,
3991088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3991188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rd),
3991288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rn),
3991388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         DRegister(rm));
3991488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3991588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3991688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
3991788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
3991888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
3991988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000140: {
3992088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000150
3992188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
3992288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
3992388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000150
3992488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3992588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3992688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3992788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3992888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3992988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3993088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3993188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3993288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3993388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3993488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3993588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3993688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3993788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3993888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3993988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VAND{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; A1
3994088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vand(al,
3994188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3994288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rd),
3994388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rn),
3994488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rm));
3994588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3994688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3994788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
3994888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2100150
3994988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3995088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3995188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3995288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3995388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
3995488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
3995588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3995688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3995788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3995888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
3995988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
3996088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3996188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3996288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3996388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
3996488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VBIC{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; A1
3996588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vbic(al,
3996688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
3996788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rd),
3996888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rn),
3996988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rm));
3997088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
3997188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
3997288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
3997388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200150
3997488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0x00000040) == 0x00000040) &&
3997588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((((Uint32((instr >> 7)) & Uint32(0x1)) << 4) |
3997688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (Uint32((instr >> 16)) & Uint32(0xf))) ==
3997788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         (((Uint32((instr >> 5)) & Uint32(0x1)) << 4) |
3997888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          (Uint32(instr) & Uint32(0xf))))) {
3997988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 12) & 1) != 0) {
3998088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
3998188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
3998288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3998388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = ExtractQRegister(instr, 22, 12);
3998488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr >> 16) & 1) != 0) {
3998588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
3998688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
3998788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
3998888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractQRegister(instr, 7, 16);
3998988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VMOV{<c>}{<q>}{.<dt>} <Qd>, <Qm> ; A1
3999088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vmov(al,
3999188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           kDataTypeValueNone,
3999288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rd),
3999388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rm));
3999488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3999588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
3999688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
3999788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
3999888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
3999988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4000088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4000188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4000288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4000388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4000488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4000588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4000688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4000788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4000888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4000988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4001088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4001188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VORR{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; A1
4001288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vorr(al,
4001388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
4001488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rd),
4001588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rn),
4001688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rm));
4001788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4001888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4001988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00300000: {
4002088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2300150
4002188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4002288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4002388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4002488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4002588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4002688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4002788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4002888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4002988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4003088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4003188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4003288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4003388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4003488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4003588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4003688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VORN{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; A1
4003788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vorn(al,
4003888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
4003988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rd),
4004088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rn),
4004188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rm));
4004288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4004388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4004488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4004588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000150
4004688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4004788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4004888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4004988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4005088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4005188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4005288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4005388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4005488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4005588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4005688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4005788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4005888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4005988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4006088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4006188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VEOR{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; A1
4006288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    veor(al,
4006388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
4006488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rd),
4006588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rn),
4006688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rm));
4006788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4006888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4006988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01100000: {
4007088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3100150
4007188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4007288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4007388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4007488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4007588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4007688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4007788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4007888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4007988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4008088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4008188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4008288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4008388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4008488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4008588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4008688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VBSL{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; A1
4008788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vbsl(al,
4008888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
4008988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rd),
4009088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rn),
4009188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rm));
4009288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4009388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4009488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
4009588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200150
4009688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4009788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4009888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4009988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4010088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4010188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4010288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4010388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4010488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4010588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4010688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4010788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4010888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4010988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4011088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4011188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VBIT{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; A1
4011288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vbit(al,
4011388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
4011488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rd),
4011588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rn),
4011688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rm));
4011788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4011888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4011988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01300000: {
4012088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3300150
4012188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4012288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4012388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4012488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4012588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4012688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4012788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4012888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4012988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4013088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4013188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4013288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4013388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4013488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4013588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4013688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VBIF{<c>}{<q>}{.<dt>} {<Qd>}, <Qn>, <Qm> ; A1
4013788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vbif(al,
4013888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
4013988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rd),
4014088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rn),
4014188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         QRegister(rm));
4014288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4014388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4014488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4014588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4014688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4014788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000200: {
4014888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000210
4014988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
4015088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4015188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4015288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4015388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4015488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4015588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
4015688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
4015788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
4015888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VQSUB{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
4015988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vqsub(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4016088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4016188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4016288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000240: {
4016388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000250
4016488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
4016588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4016688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4016788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4016888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4016988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4017088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
4017188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4017288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4017388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4017488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
4017588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
4017688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4017788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4017888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4017988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
4018088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
4018188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4018288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4018388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4018488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
4018588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VQSUB{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
4018688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vqsub(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
4018788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4018888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4018988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000300: {
4019088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000310
4019188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4019288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4019388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4019488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4019588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4019688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4019788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
4019888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
4019988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
4020088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VCGE{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
4020188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vcge(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4020288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4020388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4020488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000340: {
4020588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000350
4020688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4020788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4020888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4020988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4021088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4021188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4021288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
4021388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4021488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4021588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4021688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
4021788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
4021888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4021988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4022088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4022188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
4022288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
4022388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4022488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4022588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4022688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
4022788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VCGE{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
4022888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vcge(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
4022988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4023088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4023188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000400: {
4023288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000410
4023388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
4023488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4023588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4023688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4023788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4023888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4023988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
4024088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
4024188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
4024288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VQSHL{<c>}{<q>}.<dt> {<Dd>}, <Dm>, <Dn> ; A1
4024388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vqshl(al, dt, DRegister(rd), DRegister(rm), DRegister(rn));
4024488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4024588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4024688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000440: {
4024788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000450
4024888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
4024988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4025088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4025188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4025288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4025388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4025488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
4025588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4025688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4025788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4025888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
4025988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
4026088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4026188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4026288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4026388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
4026488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
4026588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4026688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4026788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4026888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
4026988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VQSHL{<c>}{<q>}.<dt> {<Qd>}, <Qm>, <Qn> ; A1
4027088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vqshl(al, dt, QRegister(rd), QRegister(rm), QRegister(rn));
4027188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4027288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4027388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000500: {
4027488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000510
4027588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
4027688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4027788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4027888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4027988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4028088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4028188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
4028288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
4028388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
4028488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VQRSHL{<c>}{<q>}.<dt> {<Dd>}, <Dm>, <Dn> ; A1
4028588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vqrshl(al, dt, DRegister(rd), DRegister(rm), DRegister(rn));
4028688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4028788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4028888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000540: {
4028988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000550
4029088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_3_Decode(((instr >> 20) & 0x3) |
4029188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4029288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4029388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4029488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4029588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4029688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
4029788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4029888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4029988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4030088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
4030188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
4030288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4030388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4030488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4030588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
4030688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
4030788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4030888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4030988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4031088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
4031188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VQRSHL{<c>}{<q>}.<dt> {<Qd>}, <Qm>, <Qn> ; A1
4031288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vqrshl(al, dt, QRegister(rd), QRegister(rm), QRegister(rn));
4031388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4031488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4031588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000600: {
4031688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000610
4031788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4031888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4031988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4032088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4032188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4032288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4032388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
4032488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
4032588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
4032688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VMIN{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
4032788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vmin(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4032888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4032988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4033088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000640: {
4033188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000650
4033288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4033388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4033488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4033588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4033688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4033788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4033888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
4033988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4034088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4034188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4034288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
4034388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
4034488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4034588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4034688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4034788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
4034888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
4034988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4035088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4035188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4035288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
4035388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VMIN{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
4035488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vmin(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
4035588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4035688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4035788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000700: {
4035888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000710
4035988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4036088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4036188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4036288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4036388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4036488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4036588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
4036688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
4036788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
4036888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VABA{<c>}{<q>}.<dt> <Dd>, <Dn>, <Dm> ; A1
4036988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vaba(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4037088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4037188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4037288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000740: {
4037388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000750
4037488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4037588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4037688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4037788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4037888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4037988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4038088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
4038188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4038288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4038388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4038488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
4038588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
4038688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4038788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4038888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4038988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
4039088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
4039188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4039288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4039388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4039488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
4039588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VABA{<c>}{<q>}.<dt> <Qd>, <Qn>, <Qm> ; A1
4039688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vaba(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
4039788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4039888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4039988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000800: {
4040088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000810
4040188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
4040288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4040388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000810
4040488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_7_Decode((instr >> 20) & 0x3);
4040588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
4040688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4040788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4040888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4040988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4041088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4041188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4041288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VTST{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
4041388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vtst(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4041488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4041588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4041688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4041788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000810
4041888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_4_Decode((instr >> 20) & 0x3);
4041988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
4042088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4042188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4042288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4042388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4042488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4042588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4042688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VCEQ{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
4042788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vceq(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4042888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4042988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4043088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4043188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4043288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4043388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000840: {
4043488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000850
4043588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
4043688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4043788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000850
4043888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_7_Decode((instr >> 20) & 0x3);
4043988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
4044088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4044188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4044288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4044388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4044488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4044588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4044688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4044788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4044888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4044988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4045088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4045188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4045288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4045388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4045488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4045588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4045688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4045788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4045888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VTST{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
4045988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vtst(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
4046088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4046188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4046288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4046388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000850
4046488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    DataType dt = Dt_size_4_Decode((instr >> 20) & 0x3);
4046588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (dt.Is(kDataTypeValueInvalid)) {
4046688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4046788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4046888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4046988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4047088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4047188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4047288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4047388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4047488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4047588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4047688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4047788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4047888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4047988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4048088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4048188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4048288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4048388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4048488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VCEQ{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
4048588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vceq(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
4048688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4048788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4048888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4048988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4049088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4049188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000900: {
4049288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000910
4049388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_op_size_1_Decode(((instr >> 20) & 0x3) |
4049488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 22) & 0x4));
4049588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4049688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4049788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4049888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4049988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
4050088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
4050188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
4050288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VMUL{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
4050388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vmul(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4050488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4050588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4050688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000940: {
4050788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000950
4050888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_op_size_1_Decode(((instr >> 20) & 0x3) |
4050988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  ((instr >> 22) & 0x4));
4051088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4051188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4051288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4051388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4051488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 12) & 1) != 0) {
4051588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4051688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4051788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4051888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractQRegister(instr, 22, 12);
4051988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr >> 16) & 1) != 0) {
4052088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4052188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4052288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4052388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractQRegister(instr, 7, 16);
4052488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 1) != 0) {
4052588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4052688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4052788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4052888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractQRegister(instr, 5, 0);
4052988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VMUL{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Qm> ; A1
4053088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vmul(al, dt, QRegister(rd), QRegister(rn), QRegister(rm));
4053188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4053288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4053388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000a00: {
4053488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000a10
4053588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4053688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 ((instr >> 22) & 0x4));
4053788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (dt.Is(kDataTypeValueInvalid)) {
4053888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4053988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
4054088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4054188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = ExtractDRegister(instr, 22, 12);
4054288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = ExtractDRegister(instr, 7, 16);
4054388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = ExtractDRegister(instr, 5, 0);
4054488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // VPMIN{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
4054588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                vpmin(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4054688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4054788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4054888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000b00: {
4054988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000b10
4055088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x01000000) == 0x00000000) {
4055188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  DataType dt = Dt_size_4_Decode((instr >> 20) & 0x3);
4055288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (dt.Is(kDataTypeValueInvalid)) {
4055388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4055488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
4055588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4055688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = ExtractDRegister(instr, 22, 12);
4055788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = ExtractDRegister(instr, 7, 16);
4055888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = ExtractDRegister(instr, 5, 0);
4055988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // VPADD{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm> ; A1
4056088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  vpadd(al, dt, DRegister(rd), DRegister(rn), DRegister(rm));
4056188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
4056288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
4056388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4056488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4056588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4056688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000c00: {
4056788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000c10
4056888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
4056988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4057088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000c10
4057188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4057288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4057388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4057488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VFMA{<c>}{<q>}.F32 <Dd>, <Dn>, <Dm> ; A1
4057588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vfma(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
4057688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4057788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4057888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
4057988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200c10
4058088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4058188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4058288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4058388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VFMS{<c>}{<q>}.F32 <Dd>, <Dn>, <Dm> ; A1
4058488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vfms(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
4058588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4058688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
405874339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
4058888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4058988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4059088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4059188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4059288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4059388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000c40: {
4059488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000c50
4059588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
4059688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4059788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000c50
4059888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4059988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4060088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4060188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4060288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4060388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4060488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4060588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4060688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4060788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4060888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4060988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4061088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4061188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4061288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4061388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VFMA{<c>}{<q>}.F32 <Qd>, <Qn>, <Qm> ; A1
4061488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vfma(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
4061588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4061688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4061788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
4061888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200c50
4061988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4062088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4062188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4062288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4062388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4062488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4062588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4062688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4062788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4062888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4062988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4063088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4063188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4063288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4063388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4063488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VFMS{<c>}{<q>}.F32 <Qd>, <Qn>, <Qm> ; A1
4063588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vfms(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
4063688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4063788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
406384339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
4063988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4064088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4064188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4064288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4064388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4064488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000d00: {
4064588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000d10
4064688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
4064788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4064888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000d10
4064988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4065088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4065188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4065288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMLA{<c>}{<q>}.F32 <Dd>, <Dn>, <Dm> ; A1
4065388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmla(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
4065488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4065588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4065688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
4065788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200d10
4065888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4065988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4066088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4066188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMLS{<c>}{<q>}.F32 <Dd>, <Dn>, <Dm> ; A1
4066288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmls(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
4066388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4066488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4066588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4066688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000d10
4066788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4066888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4066988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4067088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMUL{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
4067188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmul(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
4067288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4067388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
406744339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
4067588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4067688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4067788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4067888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4067988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4068088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000d40: {
4068188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000d50
4068288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
4068388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4068488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000d50
4068588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4068688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4068788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4068888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4068988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4069088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4069188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4069288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4069388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4069488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4069588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4069688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4069788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4069888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4069988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4070088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMLA{<c>}{<q>}.F32 <Qd>, <Qn>, <Qm> ; A1
4070188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmla(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
4070288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4070388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4070488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
4070588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200d50
4070688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4070788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4070888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4070988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4071088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4071188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4071288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4071388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4071488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4071588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4071688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4071788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4071888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4071988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4072088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4072188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMLS{<c>}{<q>}.F32 <Qd>, <Qn>, <Qm> ; A1
4072288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmls(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
4072388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4072488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4072588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4072688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000d50
4072788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4072888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4072988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4073088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4073188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4073288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4073388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4073488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4073588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4073688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4073788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4073888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4073988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4074088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4074188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4074288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMUL{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
4074388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmul(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
4074488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4074588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
407464339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
4074788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4074888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4074988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4075088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4075188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4075288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000e00: {
4075388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000e10
4075488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
4075588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4075688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000e10
4075788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4075888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4075988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4076088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VACGE{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
4076188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vacge(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
4076288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4076388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4076488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
4076588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200e10
4076688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4076788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4076888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4076988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VACGT{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
4077088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vacgt(al, F32, DRegister(rd), DRegister(rn), DRegister(rm));
4077188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4077288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
407734339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
4077488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4077588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4077688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4077788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4077888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4077988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000e40: {
4078088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000e50
4078188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
4078288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4078388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000e50
4078488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4078588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4078688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4078788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4078888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4078988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4079088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4079188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4079288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4079388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4079488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4079588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4079688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4079788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4079888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4079988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VACGE{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
4080088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vacge(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
4080188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4080288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4080388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
4080488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200e50
4080588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4080688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4080788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4080888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4080988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4081088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4081188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4081288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4081388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4081488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4081588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4081688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4081788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4081888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4081988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4082088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VACGT{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
4082188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vacgt(al, F32, QRegister(rd), QRegister(rn), QRegister(rm));
4082288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4082388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
408244339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
4082588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4082688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4082788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4082888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4082988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4083088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000f00: {
4083188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000f10
4083288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
4083388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4083488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000f10
4083588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4083688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4083788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4083888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VRECPS{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
4083988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vrecps(al,
4084088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           F32,
4084188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rd),
4084288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rn),
4084388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rm));
4084488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4084588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4084688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
4084788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200f10
4084888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4084988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4085088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4085188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VRSQRTS{<c>}{<q>}.F32 {<Dd>}, <Dn>, <Dm> ; A1
4085288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vrsqrts(al,
4085388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            F32,
4085488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DRegister(rd),
4085588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DRegister(rn),
4085688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DRegister(rm));
4085788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4085888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4085988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4086088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000f10
4086188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4086288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4086388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4086488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMAXNM{<q>}.F32 <Dd>, <Dn>, <Dm> ; A1
4086588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmaxnm(F32, DRegister(rd), DRegister(rn), DRegister(rm));
4086688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4086788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4086888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
4086988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200f10
4087088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
4087188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
4087288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
4087388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMINNM{<q>}.F32 <Dd>, <Dn>, <Dm> ; A1
4087488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vminnm(F32, DRegister(rd), DRegister(rn), DRegister(rm));
4087588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4087688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
408774339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
4087888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4087988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4088088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4088188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4088288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4088388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000f40: {
4088488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2000f50
4088588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01300000) {
4088688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4088788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2000f50
4088888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4088988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4089088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4089188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4089288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4089388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4089488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4089588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4089688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4089788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4089888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4089988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4090088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4090188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4090288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4090388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VRECPS{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
4090488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vrecps(al,
4090588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           F32,
4090688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rd),
4090788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rn),
4090888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           QRegister(rm));
4090988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4091088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4091188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
4091288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2200f50
4091388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4091488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4091588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4091688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4091788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4091888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4091988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4092088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4092188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4092288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4092388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4092488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4092588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4092688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4092788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4092888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VRSQRTS{<c>}{<q>}.F32 {<Qd>}, <Qn>, <Qm> ; A1
4092988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vrsqrts(al,
4093088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            F32,
4093188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            QRegister(rd),
4093288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            QRegister(rn),
4093388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            QRegister(rm));
4093488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4093588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4093688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4093788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3000f50
4093888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4093988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4094088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4094188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4094288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4094388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4094488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4094588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4094688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4094788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4094888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4094988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4095088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4095188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4095288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4095388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMAXNM{<q>}.F32 <Qd>, <Qn>, <Qm> ; A1
4095488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmaxnm(F32, QRegister(rd), QRegister(rn), QRegister(rm));
4095588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4095688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4095788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
4095888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3200f50
4095988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 12) & 1) != 0) {
4096088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4096188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4096288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4096388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractQRegister(instr, 22, 12);
4096488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr >> 16) & 1) != 0) {
4096588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4096688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4096788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4096888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractQRegister(instr, 7, 16);
4096988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 1) != 0) {
4097088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
4097188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
4097288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4097388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractQRegister(instr, 5, 0);
4097488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMINNM{<q>}.F32 <Qd>, <Qn>, <Qm> ; A1
4097588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vminnm(F32, QRegister(rd), QRegister(rn), QRegister(rm));
4097688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4097788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
409784339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
4097988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
4098088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4098188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4098288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4098388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
409844339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
4098588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
4098688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4098788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
4098888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
4098988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
4099088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00800000: {
4099188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf2800000
4099288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00300000) {
4099388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00300000: {
4099488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2b00000
4099588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01000000) {
4099688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4099788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2b00000
4099888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000040) {
4099988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2b00000
4100188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x800) == 0x800)) {
4100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4100388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4100488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
4100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4100788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4100888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = (instr >> 8) & 0xf;
4100988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VEXT{<c>}{<q>}.8 {<Dd>}, <Dn>, <Dm>, #<imm> ; A1
4101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vext(al,
4101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Untyped8,
4101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
4101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
4101488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm),
4101588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             imm);
4101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4101888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000040: {
4101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2b00040
4102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4102188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4102288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4102588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 16) & 1) != 0) {
4102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4102888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4102988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractQRegister(instr, 7, 16);
4103088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 1) != 0) {
4103188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4103288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4103388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4103488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractQRegister(instr, 5, 0);
4103588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = (instr >> 8) & 0xf;
4103688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VEXT{<c>}{<q>}.8 {<Qd>}, <Qn>, <Qm>, #<imm> ; A1
4103788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vext(al,
4103888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Untyped8,
4103988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             QRegister(rd),
4104088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             QRegister(rn),
4104188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             QRegister(rm),
4104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             imm);
4104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4104688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4104788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
4104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf3b00000
4105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000800) {
4105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf3b00000
4105388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00030200) {
4105488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4105588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b00000
4105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x000005c0) {
4105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00000
4105988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4106088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 18) & 0x3);
4106188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4106488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4106688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4106788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VREV64{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4106888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrev64(al, dt, DRegister(rd), DRegister(rm));
4106988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4107088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4107188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000040: {
4107288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00040
4107388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4107488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 18) & 0x3);
4107588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4107688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4107788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4107888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4107988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4108388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4108488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4108588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4108888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VREV64{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrev64(al, dt, QRegister(rd), QRegister(rm));
4109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
4109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00080
4109588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4109688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_15_Decode((instr >> 18) & 0x3);
4109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4109988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4110088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4110188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4110288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4110388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VREV32{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4110488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrev32(al, dt, DRegister(rd), DRegister(rm));
4110588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4110688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4110788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000000c0: {
4110888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b000c0
4110988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4111088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_15_Decode((instr >> 18) & 0x3);
4111188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4111288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4111388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4111488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4111588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4111688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4111788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4111888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4111988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4112088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4112188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4112288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4112388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4112488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4112588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VREV32{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4112688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrev32(al, dt, QRegister(rd), QRegister(rm));
4112788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4112888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00100
4113188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4113288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_1_Decode((instr >> 18) & 0x3);
4113388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4113588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4113688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4113788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4113988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VREV16{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrev16(al, dt, DRegister(rd), DRegister(rm));
4114188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000140: {
4114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00140
4114588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4114688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_1_Decode((instr >> 18) & 0x3);
4114788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4114988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4115088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4115188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4115288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4115388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4115488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4115588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4115688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4115888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4115988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4116088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4116188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VREV16{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrev16(al, dt, QRegister(rd), QRegister(rm));
4116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4116588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000400: {
4116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00400
4116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_5_Decode((instr >> 18) & 0x3);
4116988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4117088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4117188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4117388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4117588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCLS{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcls(al, dt, DRegister(rd), DRegister(rm));
4117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4117988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000440: {
4118088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00440
4118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_5_Decode((instr >> 18) & 0x3);
4118388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4118488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4118588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4118688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4118788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4118888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4118988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4119088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4119188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4119288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4119388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4119488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4119588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4119688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4119788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCLS{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4119888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcls(al, dt, QRegister(rd), QRegister(rm));
4119988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4120088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4120188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000480: {
4120288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00480
4120388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4120488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_4_Decode((instr >> 18) & 0x3);
4120588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4120688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4120788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4120888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4120988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4121088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4121188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCLZ{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4121288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vclz(al, dt, DRegister(rd), DRegister(rm));
4121388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4121488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4121588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000004c0: {
4121688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b004c0
4121788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4121888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_4_Decode((instr >> 18) & 0x3);
4121988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4122088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4122188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4122288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4122388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4122488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4122588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4122688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4122788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4122888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4122988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4123088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4123188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4123288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4123388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCLZ{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4123488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vclz(al, dt, QRegister(rd), QRegister(rm));
4123588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4123688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4123788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000500: {
4123888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00500
4123988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00000000) {
4124088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
4124188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4124288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCNT{<c>}{<q>}.8 <Dd>, <Dm> ; A1
4124388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcnt(al,
4124488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Untyped8,
4124588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4124688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm));
4124788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4124888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4124988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4125088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4125188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4125288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000540: {
4125388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00540
4125488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00000000) {
4125588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4125688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4125788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4125888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4125988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4126088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
4126188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4126288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4126388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4126488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
4126588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCNT{<c>}{<q>}.8 <Qd>, <Qm> ; A1
4126688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcnt(al,
4126788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Untyped8,
4126888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
4126988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm));
4127088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4127188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4127288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4127388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4127488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4127588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000580: {
4127688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00580
4127788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00000000) {
4127888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
4127988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4128088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VMVN{<c>}{<q>}{.<dt>} <Dd>, <Dm> ; A1
4128188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vmvn(al,
4128288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kDataTypeValueNone,
4128388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4128488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm));
4128588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4128688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4128788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4128888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4128988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4129088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000005c0: {
4129188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b005c0
4129288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00000000) {
4129388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4129488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4129588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4129688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4129788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4129888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
4129988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4130088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4130188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4130288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
4130388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VMVN{<c>}{<q>}{.<dt>} <Qd>, <Qm> ; A1
4130488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vmvn(al,
4130588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kDataTypeValueNone,
4130688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
4130788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm));
4130888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4130988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4131088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4131188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4131288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
413134339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4131488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4131588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4131688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4131788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4131888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4131988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
4132088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b00200
4132188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000540) {
4132288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4132388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00200
4132488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4132588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_size_2_Decode(((instr >> 18) & 0x3) |
4132688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 5) & 0x4));
4132788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4132888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4132988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4133088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4133188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4133288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4133388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VPADDL{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4133488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vpaddl(al, dt, DRegister(rd), DRegister(rm));
4133588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4133688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4133788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000040: {
4133888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00240
4133988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4134088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_size_2_Decode(((instr >> 18) & 0x3) |
4134188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 5) & 0x4));
4134288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4134388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4134488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4134588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4134688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4134788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4134888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4134988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4135088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4135188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4135288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4135388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4135488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4135588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4135688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VPADDL{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4135788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vpaddl(al, dt, QRegister(rd), QRegister(rm));
4135888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4135988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4136088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4136188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00300
4136288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000080) {
4136388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4136488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b00300
4136588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnimplementedA32("AESE", instr);
4136688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4136788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4136888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000080: {
4136988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b00380
4137088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnimplementedA32("AESMC", instr);
4137188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4137288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4137388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4137488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4137588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4137688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000140: {
4137788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00340
4137888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000080) {
4137988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4138088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b00340
4138188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnimplementedA32("AESD", instr);
4138288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4138388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4138488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000080: {
4138588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b003c0
4138688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnimplementedA32("AESIMC", instr);
4138788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4138888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4138988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4139088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4139188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4139288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000400: {
4139388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00600
4139488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4139588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_size_2_Decode(((instr >> 18) & 0x3) |
4139688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 5) & 0x4));
4139788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4139888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4139988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4140088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4140188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4140288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4140388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VPADAL{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4140488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vpadal(al, dt, DRegister(rd), DRegister(rm));
4140588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4140688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4140788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000440: {
4140888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00640
4140988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4141088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_size_2_Decode(((instr >> 18) & 0x3) |
4141188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 5) & 0x4));
4141288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4141388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4141488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4141588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4141688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4141788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4141888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4141988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4142088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4142188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4142288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4142388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4142488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4142588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4142688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VPADAL{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4142788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vpadal(al, dt, QRegister(rd), QRegister(rm));
4142888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4142988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4143088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000500: {
4143188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00700
4143288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000080) {
4143388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4143488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b00700
4143588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4143688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_5_Decode((instr >> 18) & 0x3);
4143788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4143888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4143988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4144088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4144188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4144288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4144388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4144488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VQABS{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4144588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqabs(al, dt, DRegister(rd), DRegister(rm));
4144688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4144788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4144888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000080: {
4144988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b00780
4145088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4145188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_5_Decode((instr >> 18) & 0x3);
4145288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4145388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4145488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4145588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4145688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4145788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4145888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4145988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VQNEG{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4146088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqneg(al, dt, DRegister(rd), DRegister(rm));
4146188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4146288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4146388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4146488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4146588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4146688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000540: {
4146788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b00740
4146888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000080) {
4146988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4147088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b00740
4147188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4147288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_5_Decode((instr >> 18) & 0x3);
4147388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4147488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4147588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4147688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4147788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4147888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4147988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4148088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4148188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4148288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4148388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4148488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4148588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4148688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4148788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4148888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VQABS{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4148988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqabs(al, dt, QRegister(rd), QRegister(rm));
4149088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4149188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4149288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000080: {
4149388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b007c0
4149488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4149588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_5_Decode((instr >> 18) & 0x3);
4149688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4149788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4149888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4149988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4150088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4150188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4150288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4150388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4150488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4150588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4150688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4150788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4150888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4150988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4151088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4151188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VQNEG{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4151288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqneg(al, dt, QRegister(rd), QRegister(rm));
4151388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4151488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4151588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4151688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4151788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4151888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4151988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4152088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4152188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00010000: {
4152288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b10000
4152388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x000001c0) {
4152488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4152588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10000
4152688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4152788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4152888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4152988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4153088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4153188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4153288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4153388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4153488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4153588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCGT{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; A1
4153688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcgt(al,
4153788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4153888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
4153988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm),
4154088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4154188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4154288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4154388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000040: {
4154488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10040
4154588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4154688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4154788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4154888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4154988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4155088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4155188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4155288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4155388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4155488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4155588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4155688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4155788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4155888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4155988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4156088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4156188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4156288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCGT{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; A1
4156388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcgt(al,
4156488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4156588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
4156688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm),
4156788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4156888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4156988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4157088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
4157188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10080
4157288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4157388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4157488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4157588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4157688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4157788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4157888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4157988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4158088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4158188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCGE{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; A1
4158288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcge(al,
4158388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4158488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
4158588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm),
4158688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4158788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4158888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4158988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000000c0: {
4159088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b100c0
4159188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4159288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4159388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4159488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4159588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4159688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4159788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4159888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4159988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4160088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4160188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4160288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4160388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4160488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4160588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4160688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4160788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4160888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCGE{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; A1
4160988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcge(al,
4161088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4161188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
4161288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm),
4161388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4161488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4161588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4161688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4161788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10100
4161888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4161988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_2_Decode(((instr >> 18) & 0x3) |
4162088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4162188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4162288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4162388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4162488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4162588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4162688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4162788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCEQ{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; A1
4162888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vceq(al,
4162988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4163088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
4163188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm),
4163288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4163388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4163488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4163588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000140: {
4163688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10140
4163788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4163888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_2_Decode(((instr >> 18) & 0x3) |
4163988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4164088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4164188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4164288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4164388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4164488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4164588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4164688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4164788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4164888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4164988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4165088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4165188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4165288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4165388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4165488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCEQ{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; A1
4165588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vceq(al,
4165688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4165788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
4165888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm),
4165988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4166088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4166188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4166288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000180: {
4166388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10180
4166488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4166588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4166688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4166788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4166888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4166988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4167088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4167188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4167288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4167388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCLE{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; A1
4167488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcle(al,
4167588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4167688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
4167788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm),
4167888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4167988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4168088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4168188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000001c0: {
4168288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b101c0
4168388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4168488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4168588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4168688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4168788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4168888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4168988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4169088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4169188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4169288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4169388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4169488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4169588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4169688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4169788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4169888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4169988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4170088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCLE{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; A1
4170188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcle(al,
4170288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4170388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
4170488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm),
4170588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4170688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4170788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4170888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4170988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4171088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4171188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00010200: {
4171288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b10200
4171388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x000001c0) {
4171488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4171588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10200
4171688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4171788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4171888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4171988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4172088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4172188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4172288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4172388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4172488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4172588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCLT{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #0 ; A1
4172688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vclt(al,
4172788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4172888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
4172988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm),
4173088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4173188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4173288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4173388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000040: {
4173488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10240
4173588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4173688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4173788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4173888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4173988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4174088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4174188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4174288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4174388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4174488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4174588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4174688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4174788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4174888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4174988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4175088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4175188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4175288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCLT{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #0 ; A1
4175388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vclt(al,
4175488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
4175588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
4175688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm),
4175788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     UINT32_C(0));
4175888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4175988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4176088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000000c0: {
4176188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b102c0
4176288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0400) == 0x00080000) {
4176388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnimplementedA32("SHA1H", instr);
4176488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4176588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4176688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4176788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4176888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4176988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4177088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10300
4177188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4177288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4177388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4177488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4177588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4177688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4177788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4177888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4177988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4178088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VABS{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4178188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vabs(al, dt, DRegister(rd), DRegister(rm));
4178288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4178388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4178488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000140: {
4178588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10340
4178688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4178788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4178888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4178988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4179088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4179188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4179288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4179388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4179488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4179588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4179688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4179788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4179888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4179988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4180088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4180188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4180288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4180388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VABS{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4180488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vabs(al, dt, QRegister(rd), QRegister(rm));
4180588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4180688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4180788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000180: {
4180888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b10380
4180988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4181088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4181188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4181288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4181388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4181488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4181588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4181688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4181788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4181888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VNEG{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4181988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vneg(al, dt, DRegister(rd), DRegister(rm));
4182088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4182188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4182288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000001c0: {
4182388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b103c0
4182488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4182588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_F_size_1_Decode(((instr >> 18) & 0x3) |
4182688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 8) & 0x4));
4182788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4182888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4182988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4183088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4183188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4183288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4183388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4183488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4183588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4183688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4183788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4183888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4183988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4184088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4184188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VNEG{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4184288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vneg(al, dt, QRegister(rd), QRegister(rm));
4184388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4184488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
418454339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4184688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4184788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4184888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4184988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4185088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4185188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00020000: {
4185288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b20000
4185388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x000005c0) {
4185488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4185588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20000
4185688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00000000) {
4185788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
4185888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4185988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VSWP{<c>}{<q>}{.<dt>} <Dd>, <Dm> ; A1
4186088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vswp(al,
4186188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kDataTypeValueNone,
4186288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4186388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm));
4186488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4186588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4186688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4186788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4186888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4186988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000040: {
4187088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20040
4187188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00000000) {
4187288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4187388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4187488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4187588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4187688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4187788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
4187888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4187988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4188088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4188188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
4188288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VSWP{<c>}{<q>}{.<dt>} <Qd>, <Qm> ; A1
4188388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vswp(al,
4188488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       kDataTypeValueNone,
4188588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
4188688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm));
4188788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4188888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4188988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4189088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4189188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4189288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
4189388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20080
4189488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4189588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 18) & 0x3);
4189688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4189788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4189888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4189988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4190088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4190188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4190288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VTRN{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4190388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vtrn(al, dt, DRegister(rd), DRegister(rm));
4190488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4190588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4190688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000000c0: {
4190788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b200c0
4190888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4190988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 18) & 0x3);
4191088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4191188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4191288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4191388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4191488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4191588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4191688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4191788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4191888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4191988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4192088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4192188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4192288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4192388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4192488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VTRN{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4192588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vtrn(al, dt, QRegister(rd), QRegister(rm));
4192688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4192788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4192888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4192988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20100
4193088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4193188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_15_Decode((instr >> 18) & 0x3);
4193288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4193388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4193488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4193588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4193688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4193788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4193888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VUZP{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4193988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vuzp(al, dt, DRegister(rd), DRegister(rm));
4194088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4194188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4194288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000140: {
4194388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20140
4194488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4194588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 18) & 0x3);
4194688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4194788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4194888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4194988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4195088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4195188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4195288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4195388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4195488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4195588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4195688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4195788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4195888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4195988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4196088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VUZP{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4196188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vuzp(al, dt, QRegister(rd), QRegister(rm));
4196288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4196388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4196488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000180: {
4196588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20180
4196688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4196788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_15_Decode((instr >> 18) & 0x3);
4196888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4196988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4197088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4197188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4197288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4197388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4197488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VZIP{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4197588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vzip(al, dt, DRegister(rd), DRegister(rm));
4197688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4197788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4197888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000001c0: {
4197988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b201c0
4198088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4198188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 18) & 0x3);
4198288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4198388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4198488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4198588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4198688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4198788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4198888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4198988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4199088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4199188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4199288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4199388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4199488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4199588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4199688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VZIP{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4199788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vzip(al, dt, QRegister(rd), QRegister(rm));
4199888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4199988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4200088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000400: {
4200188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20400
4200288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00080000) {
4200388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
4200488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4200588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VRINTN{<q>}.F32.F32 <Dd>, <Dm> ; A1
4200688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrintn(F32,
4200788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4200888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
4200988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rm));
4201088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4201188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4201288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4201388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4201488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4201588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000440: {
4201688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20440
4201788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00080000) {
4201888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4201988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4202088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4202188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4202288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4202388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
4202488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4202588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4202688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4202788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
4202888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VRINTN{<q>}.F32.F32 <Qd>, <Qm> ; A1
4202988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrintn(F32,
4203088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4203188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
4203288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rm));
4203388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4203488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4203588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4203688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4203788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4203888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000480: {
4203988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20480
4204088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00080000) {
4204188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
4204288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4204388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VRINTX{<q>}.F32.F32 <Dd>, <Dm> ; A1
4204488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrintx(al,
4204588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4204688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4204788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
4204888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rm));
4204988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4205088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4205188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4205288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4205388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4205488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000004c0: {
4205588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b204c0
4205688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00080000) {
4205788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4205888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4205988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4206088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4206188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4206288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
4206388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4206488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4206588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4206688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
4206788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VRINTX{<q>}.F32.F32 <Qd>, <Qm> ; A1
4206888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrintx(F32,
4206988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4207088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
4207188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rm));
4207288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4207388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4207488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4207588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4207688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4207788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000500: {
4207888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20500
4207988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00080000) {
4208088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
4208188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4208288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VRINTA{<q>}.F32.F32 <Dd>, <Dm> ; A1
4208388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrinta(F32,
4208488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4208588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
4208688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rm));
4208788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4208888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4208988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4209088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4209188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4209288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000540: {
4209388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20540
4209488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00080000) {
4209588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4209688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4209788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4209888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4209988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4210088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
4210188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4210288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4210388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4210488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
4210588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VRINTA{<q>}.F32.F32 <Qd>, <Qm> ; A1
4210688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrinta(F32,
4210788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4210888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
4210988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rm));
4211088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4211188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4211288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4211388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4211488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4211588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000580: {
4211688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20580
4211788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00080000) {
4211888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
4211988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4212088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VRINTZ{<q>}.F32.F32 <Dd>, <Dm> ; A1
4212188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrintz(al,
4212288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4212388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4212488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
4212588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rm));
4212688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4212788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4212888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4212988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4213088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4213188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x000005c0: {
4213288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b205c0
4213388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0000) == 0x00080000) {
4213488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4213588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4213688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4213788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4213888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4213988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
4214088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4214188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4214288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4214388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
4214488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VRINTZ{<q>}.F32.F32 <Qd>, <Qm> ; A1
4214588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vrintz(F32,
4214688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         F32,
4214788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
4214888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rm));
4214988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4215088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4215188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4215288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4215388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4215488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4215588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4215688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4215788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00020200: {
4215888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b20200
4215988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000580) {
4216088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4216188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20200
4216288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000040) {
4216388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4216488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b20200
4216588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4216688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_3_Decode((instr >> 18) & 0x3);
4216788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4216888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4216988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4217088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4217188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4217288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4217388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4217488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4217588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4217688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4217788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4217888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOVN{<c>}{<q>}.<dt> <Dd>, <Qm> ; A1
4217988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmovn(al, dt, DRegister(rd), QRegister(rm));
4218088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4218188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4218288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000040: {
4218388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b20240
4218488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4218588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_14_Decode((instr >> 18) & 0x3);
4218688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4218788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4218888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4218988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4219088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4219188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4219288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4219388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4219488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4219588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4219688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4219788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VQMOVUN{<c>}{<q>}.<dt> <Dd>, <Qm> ; A1
4219888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqmovun(al,
4219988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
4220088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
4220188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rm));
4220288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4220388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4220488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4220588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4220688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4220788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
4220888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20280
4220988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4221088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_size_3_Decode(((instr >> 18) & 0x3) |
4221188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 4) & 0x4));
4221288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4221388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4221488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4221588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4221688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4221788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4221888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4221988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4222088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4222188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4222288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VQMOVN{<c>}{<q>}.<dt> <Dd>, <Qm> ; A1
4222388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vqmovn(al, dt, DRegister(rd), QRegister(rm));
4222488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4222588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4222688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4222788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20300
4222888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x00000040) == 0x00000000) {
4222988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DataType dt =
4223088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      Dt_size_16_Decode((instr >> 18) & 0x3);
4223188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (dt.Is(kDataTypeValueInvalid)) {
4223288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4223388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4223488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4223588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4223688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4223788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4223888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4223988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4224088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4224188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  uint32_t imm = dt.GetSize();
42242d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                  // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A2 NOLINT(whitespace/line_length)
4224388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vshll(al,
4224488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
4224588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rd),
4224688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rm),
4224788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm);
4224888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4224988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4225088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4225188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4225288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4225388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000180: {
4225488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20380
4225588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x000c0040) {
4225688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080000: {
4225788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3ba0380
4225888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnimplementedA32("SHA1SU1", instr);
4225988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4226088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4226188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080040: {
4226288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3ba03c0
4226388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnimplementedA32("SHA256SU0", instr);
4226488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4226588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
422664339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                  default:
4226788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4226888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4226988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4227088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4227188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4227288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000400: {
4227388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20600
4227488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0040) == 0x00040000) {
4227588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractDRegister(instr, 22, 12);
4227688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if ((instr & 1) != 0) {
4227788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4227888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4227988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4228088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractQRegister(instr, 5, 0);
4228188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVT{<c>}{<q>}.F16.F32 <Dd>, <Qm> ; A1
4228288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvt(al,
4228388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F16,
4228488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
4228588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4228688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm));
4228788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4228888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4228988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4229088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4229188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4229288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000480: {
4229388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20680
4229488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x000c0040) {
4229588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080000: {
4229688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3ba0680
4229788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4229888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4229988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4230088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTM{<q>}.F32.F32 <Dd>, <Dm> ; A1
4230188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintm(F32,
4230288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
4230388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
4230488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
4230588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4230688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4230788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080040: {
4230888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3ba06c0
4230988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4231088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4231188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4231288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4231388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4231488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4231588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4231688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4231788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4231888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4231988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4232088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTM{<q>}.F32.F32 <Qd>, <Qm> ; A1
4232188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintm(F32,
4232288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
4232388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
4232488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rm));
4232588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4232688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
423274339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                  default:
4232888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4232988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4233088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4233188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4233288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4233388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000500: {
4233488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20700
4233588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 0x000c0040) == 0x00040000) {
4233688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr >> 12) & 1) != 0) {
4233788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4233888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    return;
4233988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4234088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rd = ExtractQRegister(instr, 22, 12);
4234188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  unsigned rm = ExtractDRegister(instr, 5, 0);
4234288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VCVT{<c>}{<q>}.F32.F16 <Qd>, <Dm> ; A1
4234388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vcvt(al,
4234488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
4234588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F16,
4234688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rd),
4234788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm));
4234888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                } else {
4234988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4235088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4235188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4235288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4235388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000580: {
4235488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b20780
4235588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x000c0040) {
4235688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080000: {
4235788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3ba0780
4235888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4235988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4236088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4236188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTP{<q>}.F32.F32 <Dd>, <Dm> ; A1
4236288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintp(F32,
4236388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
4236488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
4236588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
4236688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4236788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4236888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080040: {
4236988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3ba07c0
4237088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4237188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4237288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4237388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4237488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4237588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4237688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4237788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4237888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4237988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4238088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4238188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRINTP{<q>}.F32.F32 <Qd>, <Qm> ; A1
4238288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrintp(F32,
4238388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           F32,
4238488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
4238588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rm));
4238688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4238788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
423884339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                  default:
4238988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4239088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4239188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4239288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4239388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4239488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4239588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4239688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4239788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00030000: {
4239888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b30000
4239988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000440) {
4240088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4240188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b30000
4240288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x000c0100) {
4240388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080000: {
4240488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3bb0000
4240588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4240688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_3_Decode((instr >> 7) & 0x1);
4240788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4240888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4240988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4241088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4241188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4241288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4241388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4241488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVTA{<q>}.<dt>.F32 <Dd>, <Dm> ; A1
4241588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvta(dt,
4241688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          F32,
4241788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4241888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rm));
4241988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4242088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4242188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080100: {
4242288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3bb0100
4242388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4242488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_3_Decode((instr >> 7) & 0x1);
4242588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4242688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4242788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4242888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4242988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4243088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4243188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4243288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVTN{<q>}.<dt>.F32 <Dd>, <Dm> ; A1
4243388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvtn(dt,
4243488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          F32,
4243588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4243688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rm));
4243788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4243888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
424394339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                  default:
4244088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4244188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4244288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4244388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4244488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4244588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000040: {
4244688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b30040
4244788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x000c0100) {
4244888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080000: {
4244988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3bb0040
4245088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4245188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_3_Decode((instr >> 7) & 0x1);
4245288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4245388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4245488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4245588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4245688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4245788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4245888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4245988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4246088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4246188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4246288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4246388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4246488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4246588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4246688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4246788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVTA{<q>}.<dt>.F32 <Qd>, <Qm> ; A1
4246888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvta(dt,
4246988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          F32,
4247088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rd),
4247188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm));
4247288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4247388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4247488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00080100: {
4247588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3bb0140
4247688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4247788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_3_Decode((instr >> 7) & 0x1);
4247888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4247988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4248088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4248188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4248288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4248388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4248488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4248588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4248688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4248788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4248888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4248988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4249088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4249188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4249288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4249388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVTN{<q>}.<dt>.F32 <Qd>, <Qm> ; A1
4249488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvtn(dt,
4249588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          F32,
4249688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rd),
4249788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm));
4249888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4249988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
425004339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                  default:
4250188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
4250288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4250388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4250488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4250588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4250688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000400: {
4250788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b30400
4250888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000080) {
4250988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4251088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b30400
4251188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt = Dt_F_size_4_Decode(
4251288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 18) & 0x3) |
4251388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 6) & 0x4));
4251488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4251588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4251688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4251788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4251888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4251988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4252088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4252188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRECPE{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4252288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrecpe(al,
4252388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
4252488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
4252588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rm));
4252688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4252788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4252888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000080: {
4252988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b30480
4253088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt = Dt_F_size_4_Decode(
4253188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 18) & 0x3) |
4253288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 6) & 0x4));
4253388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4253488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4253588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4253688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4253788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4253888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4253988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4254088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRSQRTE{<c>}{<q>}.<dt> <Dd>, <Dm> ; A1
4254188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrsqrte(al,
4254288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
4254388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
4254488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rm));
4254588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4254688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4254788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4254888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4254988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4255088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000440: {
4255188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3b30440
4255288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000080) {
4255388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4255488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b30440
4255588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt = Dt_F_size_4_Decode(
4255688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 18) & 0x3) |
4255788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 6) & 0x4));
4255888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4255988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4256088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4256188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4256288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4256388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4256488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4256588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4256688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4256788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4256888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4256988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4257088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4257188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4257288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4257388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRECPE{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4257488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrecpe(al,
4257588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
4257688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rd),
4257788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rm));
4257888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4257988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4258088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000080: {
4258188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b304c0
4258288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt = Dt_F_size_4_Decode(
4258388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 18) & 0x3) |
4258488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 6) & 0x4));
4258588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4258688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4258788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4258888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4258988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4259088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4259188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4259288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4259388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4259488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4259588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4259688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4259788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4259888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4259988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4260088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VRSQRTE{<c>}{<q>}.<dt> <Qd>, <Qm> ; A1
4260188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrsqrte(al,
4260288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
4260388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rd),
4260488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rm));
4260588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4260688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4260788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4260888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4260988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4261088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4261188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4261288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4261388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00030200: {
4261488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b30200
4261588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x000c0440) {
4261688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00080000: {
4261788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3bb0200
4261888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000100) {
4261988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4262088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3bb0200
4262188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4262288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_3_Decode((instr >> 7) & 0x1);
4262388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4262488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4262588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4262688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4262788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4262888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4262988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4263088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVTP{<q>}.<dt>.F32 <Dd>, <Dm> ; A1
4263188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvtp(dt,
4263288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          F32,
4263388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4263488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rm));
4263588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4263688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4263788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000100: {
4263888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3bb0300
4263988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4264088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_3_Decode((instr >> 7) & 0x1);
4264188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4264288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4264388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4264488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4264588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4264688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4264788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4264888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVTM{<q>}.<dt>.F32 <Dd>, <Dm> ; A1
4264988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvtm(dt,
4265088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          F32,
4265188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4265288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rm));
4265388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4265488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4265588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4265688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4265788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4265888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00080040: {
4265988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3bb0240
4266088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000100) {
4266188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4266288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3bb0240
4266388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4266488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_3_Decode((instr >> 7) & 0x1);
4266588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4266688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4266788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4266888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4266988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4267088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4267188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4267288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4267388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4267488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4267588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4267688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4267788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4267888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4267988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4268088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVTP{<q>}.<dt>.F32 <Qd>, <Qm> ; A1
4268188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvtp(dt,
4268288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          F32,
4268388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rd),
4268488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm));
4268588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4268688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4268788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000100: {
4268888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3bb0340
4268988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4269088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_op_3_Decode((instr >> 7) & 0x1);
4269188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4269288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4269388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4269488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4269588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4269688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4269788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4269888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4269988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4270088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4270188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4270288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4270388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4270488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4270588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4270688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VCVTM{<q>}.<dt>.F32 <Qd>, <Qm> ; A1
4270788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vcvtm(dt,
4270888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          F32,
4270988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rd),
4271088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm));
4271188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4271288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4271388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4271488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4271588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4271688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00080400: {
4271788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3bb0600
4271888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt1 =
4271988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_1_Decode1((instr >> 7) & 0x3);
4272088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt1.Is(kDataTypeValueInvalid)) {
4272188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4272288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4272388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4272488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt2 =
4272588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_1_Decode2((instr >> 7) & 0x3);
4272688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt2.Is(kDataTypeValueInvalid)) {
4272788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4272888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4272988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4273088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4273188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4273288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVT{<c>}{<q>}.<dt>.<dt> <Dd>, <Dm> ; A1
4273388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvt(al,
4273488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt1,
4273588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt2,
4273688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
4273788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
4273888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4273988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4274088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00080440: {
4274188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3bb0640
4274288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt1 =
4274388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_1_Decode1((instr >> 7) & 0x3);
4274488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt1.Is(kDataTypeValueInvalid)) {
4274588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4274688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4274788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4274888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt2 =
4274988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_op_1_Decode2((instr >> 7) & 0x3);
4275088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt2.Is(kDataTypeValueInvalid)) {
4275188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4275288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4275388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4275488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4275588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4275688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4275788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4275888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4275988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4276088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4276188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4276288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4276388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4276488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVT{<c>}{<q>}.<dt>.<dt> <Qd>, <Qm> ; A1
4276588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvt(al,
4276688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt1,
4276788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt2,
4276888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
4276988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rm));
4277088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4277188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
427724339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4277388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4277488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4277588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4277688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4277788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4277888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4277988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4278088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4278188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000800: {
4278288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf3b00800
4278388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000440) {
4278488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4278588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b00800
4278688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4278788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 7, 16);
4278888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
4278988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
4279088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0x3) {
4279188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
4279288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
4279388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
4279488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
4279588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4279688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
4279788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
4279888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4279988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
4280088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
4280188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4280288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
4280388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
4280488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4280588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4280688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
4280788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
4280888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
4280988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VTBL{<c>}{<q>}.8 <Dd>, <list>, <Dm> ; A1
4281088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vtbl(al,
4281188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Untyped8,
4281288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
4281388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
4281488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
4281588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
4281688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
4281788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rm));
4281888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4281988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4282088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000040: {
4282188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b00840
4282288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4282388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 7, 16);
4282488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
4282588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
4282688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0x3) {
4282788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
4282888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
4282988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
4283088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
4283188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4283288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
4283388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
4283488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4283588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
4283688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
4283788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4283888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
4283988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
4284088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4284188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4284288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
4284388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
4284488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
4284588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VTBX{<c>}{<q>}.8 <Dd>, <list>, <Dm> ; A1
4284688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vtbx(al,
4284788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Untyped8,
4284888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
4284988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
4285088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
4285188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
4285288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
4285388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rm));
4285488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4285588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4285688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000400: {
4285788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b00c00
4285888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x00000380) == 0x00000000) {
4285988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned lane;
4286088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
4286188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_imm4_1_Decode((instr >> 16) & 0xf, &lane);
4286288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
4286388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4286488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4286588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4286688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
4286788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
4286888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VDUP{<c>}{<q>}.<dt> <Dd>, <Dm[x]> ; A1
4286988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vdup(al,
4287088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
4287188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
4287288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegisterLane(rm, lane));
4287388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4287488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4287588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4287688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4287788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4287888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000440: {
4287988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3b00c40
4288088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x00000380) == 0x00000000) {
4288188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned lane;
4288288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
4288388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_imm4_1_Decode((instr >> 16) & 0xf, &lane);
4288488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
4288588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4288688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4288788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4288888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
4288988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4289088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4289188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4289288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
4289388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
4289488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VDUP{<c>}{<q>}.<dt> <Qd>, <Dm[x]> ; A1
4289588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vdup(al,
4289688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
4289788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
4289888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegisterLane(rm, lane));
4289988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4290088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4290188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4290288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4290388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4290488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4290588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4290688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4290788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4290888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4290988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4291088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4291188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4291288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4291388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
4291488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000c40) {
4291588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4291688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800000
4291788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000300) {
4291888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4291988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800000
4292088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4292188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4292288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4292388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4292488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4292588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 22) & 0x4));
4292688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4292788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4292888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4292988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4293088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4293188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4293288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4293388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4293488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4293588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4293688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4293788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VADDL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; A1
4293888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vaddl(al,
4293988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4294088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4294188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
4294288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4294388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4294488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4294588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
4294688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800100
4294788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4294888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4294988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4295088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4295188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4295288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 22) & 0x4));
4295388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4295488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4295588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4295688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4295788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4295888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4295988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4296088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4296188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4296288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 16) & 1) != 0) {
4296388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4296488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4296588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4296688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractQRegister(instr, 7, 16);
4296788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4296888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VADDW{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm> ; A1
4296988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vaddw(al,
4297088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4297188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4297288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rn),
4297388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4297488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4297588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4297688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
4297788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800200
4297888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4297988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4298088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4298188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4298288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4298388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 22) & 0x4));
4298488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4298588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4298688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4298788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4298888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4298988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4299088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4299188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4299288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4299388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4299488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4299588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VSUBL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; A1
4299688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vsubl(al,
4299788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4299888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4299988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
4300088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4300188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4300288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4300388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000300: {
4300488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800300
4300588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4300688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4300788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4300888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4300988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4301088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 22) & 0x4));
4301188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4301288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4301388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4301488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4301588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4301688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4301788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4301888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4301988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4302088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 16) & 1) != 0) {
4302188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4302288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4302388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4302488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractQRegister(instr, 7, 16);
4302588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4302688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VSUBW{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm> ; A1
4302788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vsubw(al,
4302888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4302988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4303088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rn),
4303188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4303288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4303388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4303488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4303588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4303688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4303788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000040: {
4303888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800040
4303988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000200) {
4304088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4304188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800040
4304288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x01000000) {
4304388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4304488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800040
4304588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4304688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4304788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4304888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4304988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_9_Decode((instr >> 20) & 0x3,
4305088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 8) & 0x1);
4305188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4305288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4305388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4305488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4305588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4305688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractDRegister(instr, 7, 16);
4305788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane;
4305888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm =
4305988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
43060d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMLA{<c>}{<q>}.<type><size> <Dd>, <Dn>, <Dm[x]> ; A1 NOLINT(whitespace/line_length)
4306188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmla(al,
4306288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4306388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
4306488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rn),
4306588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegisterLane(rm, lane));
4306688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4306788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4306888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x01000000: {
4306988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3800040
4307088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4307188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4307288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4307388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4307488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_9_Decode((instr >> 20) & 0x3,
4307588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 8) & 0x1);
4307688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4307788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4307888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4307988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4308088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4308188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4308288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4308388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4308488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4308588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 16) & 1) != 0) {
4308688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4308788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4308888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4308988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractQRegister(instr, 7, 16);
4309088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane;
4309188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm =
4309288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
43093d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMLA{<c>}{<q>}.<type><size> <Qd>, <Qn>, <Dm[x]> ; A1 NOLINT(whitespace/line_length)
4309488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmla(al,
4309588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4309688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rd),
4309788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rn),
4309888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegisterLane(rm, lane));
4309988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4310088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4310188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4310288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4310388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4310488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
4310588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800240
4310688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
4310788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4310888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800240
4310988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4311088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4311188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4311288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4311388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4311488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_size_11_Decode((instr >> 20) & 0x3,
4311588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 24) & 0x1);
4311688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4311788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4311888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4311988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4312088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4312188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4312288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4312388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4312488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4312588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractDRegister(instr, 7, 16);
4312688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane;
4312788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm =
4312888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
43129d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMLAL{<c>}{<q>}.<type><size> <Qd>, <Dn>, <Dm[x]> ; A1 NOLINT(whitespace/line_length)
4313088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmlal(al,
4313188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  dt,
4313288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  QRegister(rd),
4313388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rn),
4313488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegisterLane(rm, lane));
4313588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4313688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4313788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4313888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800340
4313988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x01000000) == 0x00000000) {
4314088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x300000) == 0x300000)) {
4314188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4314288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4314388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4314488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
4314588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_13_Decode((instr >> 20) & 0x3);
4314688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
4314788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4314888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4314988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4315088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
4315188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4315288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4315388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4315488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
4315588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
4315688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t mvm =
4315788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0xf) | ((instr >> 1) & 0x10);
4315888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t shift = 4;
4315988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(S16)) {
4316088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift = 3;
4316188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4316288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t vm = mvm & ((1 << shift) - 1);
4316388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t index = mvm >> shift;
43164d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VQDMLAL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm>[<index>] ; A2 NOLINT(whitespace/line_length)
4316588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vqdmlal(al,
4316688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
4316788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
4316888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rn),
4316988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(vm),
4317088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      index);
4317188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4317288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4317388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4317488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4317588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4317688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4317788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4317888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4317988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4318088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4318188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4318288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000400: {
4318388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800400
4318488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000300) {
4318588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4318688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800400
4318788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x01000000) {
4318888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4318988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800400
4319088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4319188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4319288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4319388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4319488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_3_Decode((instr >> 20) & 0x3);
4319588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4319688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4319788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4319888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4319988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4320088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 16) & 1) != 0) {
4320188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4320288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4320388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4320488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractQRegister(instr, 7, 16);
4320588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4320688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4320788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4320888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4320988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4321088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VADDHN{<c>}{<q>}.<dt> <Dd>, <Qn>, <Qm> ; A1
4321188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vaddhn(al,
4321288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
4321388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
4321488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
4321588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
4321688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4321788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4321888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x01000000: {
4321988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3800400
4322088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4322188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4322288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4322388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4322488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_3_Decode((instr >> 20) & 0x3);
4322588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4322688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4322788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4322888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4322988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4323088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 16) & 1) != 0) {
4323188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4323288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4323388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4323488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractQRegister(instr, 7, 16);
4323588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4323688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4323788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4323888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4323988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4324088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VRADDHN{<c>}{<q>}.<dt> <Dd>, <Qn>, <Qm> ; A1
4324188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vraddhn(al,
4324288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    dt,
4324388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
4324488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rn),
4324588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rm));
4324688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4324788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4324888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4324988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4325088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4325188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
4325288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800500
4325388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4325488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4325588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4325688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4325788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4325888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 22) & 0x4));
4325988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4326088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4326188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4326288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4326388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4326488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4326588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4326688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4326788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4326888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4326988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4327088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VABAL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; A1
4327188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vabal(al,
4327288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4327388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4327488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
4327588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4327688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4327788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4327888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
4327988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800600
4328088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x01000000) {
4328188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4328288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800600
4328388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4328488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4328588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4328688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4328788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_3_Decode((instr >> 20) & 0x3);
4328888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4328988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4329088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4329188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4329288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4329388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 16) & 1) != 0) {
4329488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4329588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4329688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4329788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractQRegister(instr, 7, 16);
4329888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4329988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4330088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4330188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4330288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4330388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VSUBHN{<c>}{<q>}.<dt> <Dd>, <Qn>, <Qm> ; A1
4330488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vsubhn(al,
4330588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
4330688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
4330788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rn),
4330888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm));
4330988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4331088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4331188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x01000000: {
4331288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3800600
4331388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4331488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4331588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4331688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4331788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_3_Decode((instr >> 20) & 0x3);
4331888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4331988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4332088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4332188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4332288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4332388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 16) & 1) != 0) {
4332488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4332588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4332688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4332788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractQRegister(instr, 7, 16);
4332888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4332988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4333088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4333188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4333288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4333388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VRSUBHN{<c>}{<q>}.<dt> <Dd>, <Qn>, <Qm> ; A1
4333488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vrsubhn(al,
4333588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    dt,
4333688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DRegister(rd),
4333788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rn),
4333888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QRegister(rm));
4333988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4334088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4334188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4334288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4334388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4334488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000300: {
4334588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800700
4334688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4334788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4334888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4334988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4335088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_U_size_1_Decode(((instr >> 20) & 0x3) |
4335188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 22) & 0x4));
4335288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4335388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4335488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4335588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4335688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4335788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4335888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4335988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4336088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4336188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4336288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4336388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VABDL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; A1
4336488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vabdl(al,
4336588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4336688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4336788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
4336888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4336988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4337088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4337188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4337288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4337388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4337488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000440: {
4337588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800440
4337688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000200) {
4337788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4337888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800440
4337988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x01000000) {
4338088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4338188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800440
4338288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4338388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4338488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4338588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4338688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_9_Decode((instr >> 20) & 0x3,
4338788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 8) & 0x1);
4338888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4338988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4339088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4339188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4339288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4339388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractDRegister(instr, 7, 16);
4339488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane;
4339588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm =
4339688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
43397d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMLS{<c>}{<q>}.<type><size> <Dd>, <Dn>, <Dm[x]> ; A1 NOLINT(whitespace/line_length)
4339888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmls(al,
4339988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4340088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
4340188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rn),
4340288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegisterLane(rm, lane));
4340388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4340488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4340588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x01000000: {
4340688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3800440
4340788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4340888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4340988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4341088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4341188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_9_Decode((instr >> 20) & 0x3,
4341288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           (instr >> 8) & 0x1);
4341388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4341488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4341588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4341688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4341788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4341888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4341988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4342088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4342188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4342288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 16) & 1) != 0) {
4342388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4342488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4342588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4342688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractQRegister(instr, 7, 16);
4342788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane;
4342888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm =
4342988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
43430d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMLS{<c>}{<q>}.<type><size> <Qd>, <Qn>, <Dm[x]> ; A1 NOLINT(whitespace/line_length)
4343188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmls(al,
4343288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4343388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rd),
4343488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rn),
4343588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegisterLane(rm, lane));
4343688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4343788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4343888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4343988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4344088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4344188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
4344288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800640
4344388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
4344488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4344588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800640
4344688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4344788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4344888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4344988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4345088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4345188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_size_11_Decode((instr >> 20) & 0x3,
4345288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  (instr >> 24) & 0x1);
4345388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4345488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4345588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4345688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4345788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4345888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4345988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4346088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4346188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4346288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractDRegister(instr, 7, 16);
4346388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane;
4346488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm =
4346588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
43466d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMLSL{<c>}{<q>}.<type><size> <Qd>, <Dn>, <Dm[x]> ; A1 NOLINT(whitespace/line_length)
4346788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmlsl(al,
4346888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  dt,
4346988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  QRegister(rd),
4347088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rn),
4347188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegisterLane(rm, lane));
4347288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4347388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4347488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4347588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800740
4347688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x01000000) == 0x00000000) {
4347788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x300000) == 0x300000)) {
4347888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4347988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4348088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4348188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
4348288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_13_Decode((instr >> 20) & 0x3);
4348388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
4348488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4348588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4348688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4348788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
4348888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4348988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4349088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4349188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
4349288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
4349388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t mvm =
4349488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (instr & 0xf) | ((instr >> 1) & 0x10);
4349588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t shift = 4;
4349688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(S16)) {
4349788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift = 3;
4349888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4349988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t vm = mvm & ((1 << shift) - 1);
4350088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t index = mvm >> shift;
43501d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VQDMLSL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm>[<index>] ; A2 NOLINT(whitespace/line_length)
4350288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vqdmlsl(al,
4350388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
4350488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
4350588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rn),
4350688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(vm),
4350788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      index);
4350888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4350988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4351088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4351188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4351288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4351388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4351488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4351588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4351688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4351788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4351888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4351988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000800: {
4352088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800800
4352188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000300) {
4352288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4352388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800800
4352488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4352588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4352688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4352788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4352888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_12_Decode((instr >> 20) & 0x3,
4352988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 24) & 0x1);
4353088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4353188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4353288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4353388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4353488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4353588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4353688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4353788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4353888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4353988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4354088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4354188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMLAL{<c>}{<q>}.<type><size> <Qd>, <Dn>, <Dm> ; A1
4354288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmlal(al,
4354388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4354488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4354588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
4354688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4354788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4354888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4354988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
4355088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800900
4355188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x01000000) == 0x00000000) {
4355288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x300000) == 0x300000)) {
4355388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4355488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4355588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4355688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
4355788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
4355888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4355988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4356088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4356188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
4356288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4356388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4356488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4356588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
4356688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
4356788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
4356888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQDMLAL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; A1
4356988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqdmlal(al,
4357088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  dt,
4357188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  QRegister(rd),
4357288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rn),
4357388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rm));
4357488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
4357588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4357688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4357788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4357888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4357988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
4358088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800a00
4358188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4358288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4358388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4358488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4358588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_12_Decode((instr >> 20) & 0x3,
4358688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 24) & 0x1);
4358788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4358888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4358988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4359088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4359188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4359288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4359388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4359488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4359588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4359688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4359788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4359888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMLSL{<c>}{<q>}.<type><size> <Qd>, <Dn>, <Dm> ; A1
4359988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmlsl(al,
4360088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4360188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4360288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
4360388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4360488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4360588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4360688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000300: {
4360788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800b00
4360888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x01000000) == 0x00000000) {
4360988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x300000) == 0x300000)) {
4361088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4361188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4361288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4361388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
4361488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
4361588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4361688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4361788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4361888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
4361988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4362088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4362188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4362288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
4362388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
4362488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
4362588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQDMLSL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; A1
4362688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqdmlsl(al,
4362788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  dt,
4362888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  QRegister(rd),
4362988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rn),
4363088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rm));
4363188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
4363288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4363388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4363488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4363588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4363688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4363788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4363888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4363988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000840: {
4364088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800840
4364188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000200) {
4364288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4364388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800840
4364488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x01000000) {
4364588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4364688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800840
4364788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4364888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4364988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4365088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4365188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_F_size_3_Decode(
4365288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr >> 20) & 0x3) | ((instr >> 6) & 0x4));
4365388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4365488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4365588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4365688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4365788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4365888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractDRegister(instr, 7, 16);
4365988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t mvm =
4366088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 1) & 0x10);
4366188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t shift = 4;
4366288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(I16)) {
4366388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift = 3;
4366488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4366588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t vm = mvm & ((1 << shift) - 1);
4366688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t index = mvm >> shift;
43667d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMUL{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm>[<index>] ; A1 NOLINT(whitespace/line_length)
4366888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmul(al,
4366988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4367088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
4367188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rn),
4367288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(vm),
4367388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 index);
4367488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4367588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4367688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x01000000: {
4367788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf3800840
4367888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4367988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4368088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4368188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4368288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_F_size_3_Decode(
4368388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr >> 20) & 0x3) | ((instr >> 6) & 0x4));
4368488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4368588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4368688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4368788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4368888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4368988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4369088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4369188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4369288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4369388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 16) & 1) != 0) {
4369488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4369588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4369688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4369788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractQRegister(instr, 7, 16);
4369888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t mvm =
4369988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 1) & 0x10);
4370088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t shift = 4;
4370188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(I16)) {
4370288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift = 3;
4370388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4370488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t vm = mvm & ((1 << shift) - 1);
4370588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t index = mvm >> shift;
43706d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMUL{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm>[<index>] ; A1 NOLINT(whitespace/line_length)
4370788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmul(al,
4370888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4370988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rd),
4371088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rn),
4371188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(vm),
4371288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 index);
4371388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4371488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4371588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4371688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4371788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4371888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
4371988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800a40
4372088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
4372188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4372288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800a40
4372388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x300000) == 0x300000)) {
4372488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4372588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4372688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4372788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_U_size_2_Decode(
4372888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr >> 20) & 0x3) | ((instr >> 22) & 0x4));
4372988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4373088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4373188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4373288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4373388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4373488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4373588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4373688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4373788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4373888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractDRegister(instr, 7, 16);
4373988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t mvm =
4374088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 1) & 0x10);
4374188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t shift = 4;
4374288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(S16) || dt.Is(U16)) {
4374388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              shift = 3;
4374488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4374588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t vm = mvm & ((1 << shift) - 1);
4374688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t index = mvm >> shift;
43747d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VMULL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm>[<index>] ; A1 NOLINT(whitespace/line_length)
4374888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmull(al,
4374988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  dt,
4375088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  QRegister(rd),
4375188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rn),
4375288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(vm),
4375388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  index);
4375488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4375588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4375688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4375788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800b40
4375888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x01000000) == 0x00000000) {
4375988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x300000) == 0x300000)) {
4376088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4376188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4376288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4376388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt =
4376488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Dt_size_13_Decode((instr >> 20) & 0x3);
4376588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
4376688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4376788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4376888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4376988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
4377088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4377188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4377288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4377388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
4377488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractDRegister(instr, 7, 16);
4377588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              int lane;
4377688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegisterAndLane(instr,
4377788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    dt,
4377888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    5,
4377988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0,
4378088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    &lane);
4378188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VQDMULL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm[x]> ; A2
4378288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vqdmull(al,
4378388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
4378488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
4378588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rn),
4378688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegisterLane(rm, lane));
4378788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4378888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4378988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4379088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4379188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4379288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4379388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4379488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4379588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4379688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4379788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4379888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000c00: {
4379988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800c00
4380088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000100) {
4380188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4380288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800c00
4380388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4380488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4380588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4380688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4380788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_U_size_1_Decode(
4380888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr >> 20) & 0x3) | ((instr >> 22) & 0x4) |
4380988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr >> 6) & 0x8));
4381088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4381188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4381288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4381388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4381488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4381588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4381688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4381788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4381888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4381988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4382088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
4382188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMULL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; A1
4382288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmull(al,
4382388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              dt,
4382488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              QRegister(rd),
4382588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
4382688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
4382788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4382888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4382988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
4383088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800d00
4383188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x01000200) == 0x00000000) {
4383288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0x300000) == 0x300000)) {
4383388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4383488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4383588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4383688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
4383788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (dt.Is(kDataTypeValueInvalid)) {
4383888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4383988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4384088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4384188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr >> 12) & 1) != 0) {
4384288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
4384388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
4384488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4384588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractQRegister(instr, 22, 12);
4384688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rn = ExtractDRegister(instr, 7, 16);
4384788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
4384888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VQDMULL{<c>}{<q>}.<dt> <Qd>, <Dn>, <Dm> ; A1
4384988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vqdmull(al,
4385088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  dt,
4385188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  QRegister(rd),
4385288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rn),
4385388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  DRegister(rm));
4385488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
4385588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4385688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4385788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4385888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4385988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4386088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4386188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4386288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000c40: {
4386388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800c40
4386488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x01000300) {
4386588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4386688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800c40
4386788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4386888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4386988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4387088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4387188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
4387288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4387388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4387488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4387588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4387688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
4387788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4387888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int lane;
4387988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm =
4388088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
4388188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VQDMULH{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm[x]> ; A2
4388288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vqdmulh(al,
4388388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
4388488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rd),
4388588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegister(rn),
4388688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegisterLane(rm, lane));
4388788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4388888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4388988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
4389088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800d40
4389188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4389288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4389388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4389488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4389588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
4389688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4389788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4389888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4389988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4390088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
4390188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
4390288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int lane;
4390388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm =
4390488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
4390588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VQRDMULH{<c>}{<q>}.<dt> {<Dd>}, <Dn>, <Dm[x]> ; A2
4390688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vqrdmulh(al,
4390788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4390888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
4390988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rn),
4391088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegisterLane(rm, lane));
4391188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4391288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4391388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01000000: {
4391488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf3800c40
4391588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4391688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4391788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4391888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4391988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
4392088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4392188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4392288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4392388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4392488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4392588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4392688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4392788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4392888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4392988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 16) & 1) != 0) {
4393088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4393188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4393288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4393388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractQRegister(instr, 7, 16);
4393488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int lane;
4393588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm =
4393688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
4393788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VQDMULH{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm[x]> ; A2
4393888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vqdmulh(al,
4393988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                dt,
4394088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rd),
4394188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QRegister(rn),
4394288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DRegisterLane(rm, lane));
4394388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4394488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4394588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01000100: {
4394688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf3800d40
4394788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0x300000) == 0x300000)) {
4394888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4394988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4395088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4395188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_13_Decode((instr >> 20) & 0x3);
4395288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
4395388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4395488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4395588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4395688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 12) & 1) != 0) {
4395788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4395888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4395988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4396088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractQRegister(instr, 22, 12);
4396188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr >> 16) & 1) != 0) {
4396288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
4396388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
4396488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4396588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractQRegister(instr, 7, 16);
4396688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int lane;
4396788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm =
4396888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ExtractDRegisterAndLane(instr, dt, 5, 0, &lane);
4396988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VQRDMULH{<c>}{<q>}.<dt> {<Qd>}, <Qn>, <Dm[x]> ; A2
4397088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vqrdmulh(al,
4397188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4397288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rd),
4397388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 QRegister(rn),
4397488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegisterLane(rm, lane));
4397588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4397688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
439774339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
4397888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
4397988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4398088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4398188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4398288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4398388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4398488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4398588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4398688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
4398788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
4398888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
4398988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00800010: {
4399088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf2800010
4399188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000040) {
4399288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
4399388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2800010
4399488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000c00) {
4399588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4399688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800010
4399788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00380080) {
4399888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4399988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800010
4400088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
4400188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4400288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800010
4400388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000200) {
4400488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default: {
4400588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000020) {
4400688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000020: {
4400788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800030
4400888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xd00) == 0x100) ||
4400988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xd00) == 0x500) ||
4401088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xd00) == 0x900) ||
4401188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xe00) == 0xe00)) {
4401288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4401388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4401488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4401588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = (instr >> 8) & 0xf;
4401688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4401788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmvn::DecodeDt(cmode);
4401888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4401988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4402088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4402188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4402288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4402388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4402488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DOperand imm =
4402588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmvn::DecodeImmediate(
4402688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4402788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4402888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4402988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4403088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4403188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmvn(al, dt, DRegister(rd), imm);
4403288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4403388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4403488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4403588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x920) == 0x100) ||
4403688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x520) == 0x100) ||
4403788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x820) == 0x20) ||
4403888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x420) == 0x20) ||
4403988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x220) == 0x20) ||
4404088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x120) == 0x120)) {
4404188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4404288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4404388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4404488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = ((instr >> 8) & 0xf) |
4404588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     ((instr >> 1) & 0x10);
4404688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4404788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeDt(cmode);
4404888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4404988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4405088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4405188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4405288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4405388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4405488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DOperand imm =
4405588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeImmediate(
4405688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4405788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4405888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4405988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4406088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4406188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmov(al, dt, DRegister(rd), imm);
4406288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4406388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4406488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4406588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4406688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4406788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4406888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4406988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4407088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4407188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800110
4407288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000020) {
4407388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4407488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800110
4407588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x100) == 0x0) ||
4407688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc00) == 0xc00)) {
4407788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4407888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4407988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4408088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned cmode = (instr >> 8) & 0xf;
4408188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt = ImmediateVorr::DecodeDt(cmode);
4408288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4408388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4408488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4408588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4408688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4408788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DOperand imm = ImmediateVorr::DecodeImmediate(
4408888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    cmode,
4408988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (instr & 0xf) | ((instr >> 12) & 0x70) |
4409088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 17) & 0x80));
44091d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VORR{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4409288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vorr(al, dt, DRegister(rd), DRegister(rd), imm);
4409388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4409488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4409588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000020: {
4409688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800130
4409788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x100) == 0x0) ||
4409888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc00) == 0xc00)) {
4409988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4410088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4410188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4410288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned cmode = (instr >> 8) & 0xf;
4410388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt = ImmediateVbic::DecodeDt(cmode);
4410488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4410588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4410688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4410788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4410888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4410988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DOperand imm = ImmediateVbic::DecodeImmediate(
4411088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    cmode,
4411188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (instr & 0xf) | ((instr >> 12) & 0x70) |
4411288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 17) & 0x80));
44113d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VBIC{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4411488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vbic(al, dt, DRegister(rd), DRegister(rd), imm);
4411588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4411688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4411788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4411888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4411988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4412088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4412188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4412288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4412388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
4412488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000300) {
4412588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4412688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800010
4412788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4412888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4412988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4413088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4413188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4413288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4413388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4413488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4413588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4413688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4413788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4413888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4413988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4414088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
4414188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4414288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4414388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4414488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6;
44145d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VSHR{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4414688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vshr(al, dt, DRegister(rd), DRegister(rm), imm);
4414788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4414888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4414988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4415088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800110
4415188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4415288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4415388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4415488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4415588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4415688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4415788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4415888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4415988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4416088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4416188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4416288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4416388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4416488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
4416588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4416688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4416788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4416888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6;
44169d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VSRA{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4417088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vsra(al, dt, DRegister(rd), DRegister(rm), imm);
4417188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4417288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4417388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
4417488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800210
4417588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4417688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4417788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4417888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4417988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4418088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4418188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4418288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4418388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4418488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4418588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4418688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4418788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4418888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
4418988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4419088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4419188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4419288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6;
44193d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VRSHR{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4419488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vrshr(al, dt, DRegister(rd), DRegister(rm), imm);
4419588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4419688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4419788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
4419888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800310
4419988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4420088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4420188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4420288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4420388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4420488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4420588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4420688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4420788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4420888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4420988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4421088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4421188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4421288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
4421388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4421488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4421588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4421688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6;
44217d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VRSRA{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4421888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vrsra(al, dt, DRegister(rd), DRegister(rm), imm);
4421988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4422088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4422188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4422288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4422388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4422488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4422588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4422688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4422788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000400: {
4422888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800410
4422988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00380080) {
4423088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4423188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800410
4423288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
4423388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4423488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800410
4423588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000200) {
4423688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default: {
4423788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000020) {
4423888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000020: {
4423988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800430
4424088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xd00) == 0x100) ||
4424188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xd00) == 0x500) ||
4424288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xd00) == 0x900) ||
4424388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xe00) == 0xe00)) {
4424488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4424588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4424688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4424788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = (instr >> 8) & 0xf;
4424888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4424988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmvn::DecodeDt(cmode);
4425088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4425188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4425288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4425388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4425488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4425588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4425688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DOperand imm =
4425788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmvn::DecodeImmediate(
4425888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4425988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4426088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4426188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4426288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4426388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmvn(al, dt, DRegister(rd), imm);
4426488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4426588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4426688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4426788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x920) == 0x100) ||
4426888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x520) == 0x100) ||
4426988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x820) == 0x20) ||
4427088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x420) == 0x20) ||
4427188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x220) == 0x20) ||
4427288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x120) == 0x120)) {
4427388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4427488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4427588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4427688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = ((instr >> 8) & 0xf) |
4427788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     ((instr >> 1) & 0x10);
4427888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4427988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeDt(cmode);
4428088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4428188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4428288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4428388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4428488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4428588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4428688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DOperand imm =
4428788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeImmediate(
4428888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4428988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4429088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4429188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4429288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4429388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmov(al, dt, DRegister(rd), imm);
4429488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4429588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4429688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4429788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4429888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4429988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4430088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4430188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4430288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4430388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800510
4430488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000020) {
4430588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4430688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800510
4430788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x100) == 0x0) ||
4430888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc00) == 0xc00)) {
4430988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4431088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4431188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4431288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned cmode = (instr >> 8) & 0xf;
4431388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt = ImmediateVorr::DecodeDt(cmode);
4431488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4431588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4431688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4431788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4431888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4431988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DOperand imm = ImmediateVorr::DecodeImmediate(
4432088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    cmode,
4432188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (instr & 0xf) | ((instr >> 12) & 0x70) |
4432288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 17) & 0x80));
44323d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VORR{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4432488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vorr(al, dt, DRegister(rd), DRegister(rd), imm);
4432588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4432688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4432788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000020: {
4432888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800530
4432988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x100) == 0x0) ||
4433088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc00) == 0xc00)) {
4433188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4433288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4433388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4433488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned cmode = (instr >> 8) & 0xf;
4433588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt = ImmediateVbic::DecodeDt(cmode);
4433688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4433788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4433888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4433988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4434088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4434188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DOperand imm = ImmediateVbic::DecodeImmediate(
4434288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    cmode,
4434388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (instr & 0xf) | ((instr >> 12) & 0x70) |
4434488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 17) & 0x80));
44345d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VBIC{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4434688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vbic(al, dt, DRegister(rd), DRegister(rd), imm);
4434788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4434888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4434988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4435088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4435188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4435288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4435388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4435488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4435588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
4435688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000300) {
4435788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4435888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800410
4435988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x01000000) == 0x01000000) {
4436088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x380080) == 0x0)) {
4436188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4436288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4436388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4436488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt = Dt_L_imm6_4_Decode(
4436588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 19) & 0x7) | ((instr >> 4) & 0x8));
4436688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
4436788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4436888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4436988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4437088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
4437188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
4437288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm6 = (instr >> 16) & 0x3f;
4437388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm =
4437488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4437588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  imm6;
4437688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSRI{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #<imm> ; A1
4437788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vsri(al, dt, DRegister(rd), DRegister(rm), imm);
4437888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4437988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4438088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4438188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4438288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4438388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4438488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800510
4438588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x01000000) {
4438688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4438788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800510
4438888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380080) == 0x0)) {
4438988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4439088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4439188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4439288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4439388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_L_imm6_3_Decode(((instr >> 19) & 0x7) |
4439488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8));
4439588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4439688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4439788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4439888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4439988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4440088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4440188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4440288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm =
4440388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
44404d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VSHL{<c>}{<q>}.I<size> {<Dd>}, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4440588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vshl(al, dt, DRegister(rd), DRegister(rm), imm);
4440688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4440788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4440888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x01000000: {
4440988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3800510
4441088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380080) == 0x0)) {
4441188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4441288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4441388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4441488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4441588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_L_imm6_4_Decode(((instr >> 19) & 0x7) |
4441688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8));
4441788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4441888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4441988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4442088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4442188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4442288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4442388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4442488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm =
4442588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
4442688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VSLI{<c>}{<q>}.<dt> {<Dd>}, <Dm>, #<imm> ; A1
4442788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vsli(al, dt, DRegister(rd), DRegister(rm), imm);
4442888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4442988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4443088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4443188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4443288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4443388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
4443488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800610
4443588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4443688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4443788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4443888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4443988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4444088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_2_Decode(((instr >> 19) & 0x7) |
4444188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4444288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4444388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4444488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4444588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4444688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4444788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4444888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
4444988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4445088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4445188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
44452d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VQSHLU{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4445388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vqshlu(al, dt, DRegister(rd), DRegister(rm), imm);
4445488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4445588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4445688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
4445788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800710
4445888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4445988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4446088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4446188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4446288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4446388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4446488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4446588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4446688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4446788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4446888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4446988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4447088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
4447188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractDRegister(instr, 5, 0);
4447288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4447388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4447488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
44475d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VQSHL{<c>}{<q>}.<type><size> {<Dd>}, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4447688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vqshl(al, dt, DRegister(rd), DRegister(rm), imm);
4447788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4447888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4447988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4448088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4448188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4448288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4448388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4448488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4448588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000800: {
4448688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800810
4448788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000080) {
4448888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4448988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800810
4449088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00380000) {
4449188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4449288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800810
4449388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000100) {
4449488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4449588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800810
4449688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000200) {
4449788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4449888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    switch (instr & 0x00000020) {
4449988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00000020: {
4450088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2800830
4450188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0xd00) == 0x100) ||
4450288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0xd00) == 0x500) ||
4450388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0xd00) == 0x900) ||
4450488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0xe00) == 0xe00)) {
4450588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4450688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4450788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4450888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned cmode = (instr >> 8) & 0xf;
4450988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4451088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmvn::DecodeDt(cmode);
4451188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4451288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4451388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4451488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4451588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4451688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 22, 12);
4451788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DOperand imm =
4451888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmvn::DecodeImmediate(
4451988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                cmode,
4452088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                (instr & 0xf) |
4452188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 12) & 0x70) |
4452288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 17) & 0x80));
4452388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4452488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmvn(al, dt, DRegister(rd), imm);
4452588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4452688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4452788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      default: {
4452888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x920) == 0x100) ||
4452988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x520) == 0x100) ||
4453088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x820) == 0x20) ||
4453188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x420) == 0x20) ||
4453288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x220) == 0x20) ||
4453388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x120) == 0x120)) {
4453488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4453588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4453688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4453788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned cmode = ((instr >> 8) & 0xf) |
4453888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 1) & 0x10);
4453988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4454088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmov::DecodeDt(cmode);
4454188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4454288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4454388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4454488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4454588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4454688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 22, 12);
4454788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DOperand imm =
4454888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmov::DecodeImmediate(
4454988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                cmode,
4455088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                (instr & 0xf) |
4455188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 12) & 0x70) |
4455288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 17) & 0x80));
4455388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4455488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmov(al, dt, DRegister(rd), imm);
4455588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4455688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4455788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4455888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4455988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4456088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4456188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4456288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4456388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4456488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800910
4456588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000020) {
4456688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4456788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800910
4456888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x100) == 0x0) ||
4456988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xc00) == 0xc00)) {
4457088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4457188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4457288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4457388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = (instr >> 8) & 0xf;
4457488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4457588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVorr::DecodeDt(cmode);
4457688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4457788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4457888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4457988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4458088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4458188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4458288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DOperand imm =
4458388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVorr::DecodeImmediate(
4458488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4458588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4458688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4458788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
44588d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VORR{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4458988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vorr(al,
4459088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
4459188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
4459288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
4459388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         imm);
4459488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4459588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4459688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000020: {
4459788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800930
4459888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x100) == 0x0) ||
4459988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xc00) == 0xc00)) {
4460088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4460188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4460288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4460388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = (instr >> 8) & 0xf;
4460488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4460588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVbic::DecodeDt(cmode);
4460688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4460788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4460888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4460988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4461088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4461188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4461288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DOperand imm =
4461388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVbic::DecodeImmediate(
4461488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4461588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4461688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4461788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
44618d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VBIC{<c>}{<q>}.<dt> {<Ddn>}, <Ddn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4461988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vbic(al,
4462088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
4462188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
4462288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         DRegister(rd),
4462388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         imm);
4462488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4462588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4462688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4462788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4462888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4462988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4463088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4463188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4463288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00180000: {
4463388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2980810
4463488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000300) {
4463588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4463688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2980810
4463788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x01000000) {
4463888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4463988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2980810
4464088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4464188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4464288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4464388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4464488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4464588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_3_Decode((instr >> 19) & 0x7);
4464688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4464788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4464888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4464988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4465088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4465188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4465288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4465388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4465488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4465588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4465688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4465788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4465888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
44659d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4466088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vshrn(al,
4466188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          dt,
4466288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4466388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm),
4466488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm);
4466588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4466688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4466788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x01000000: {
4466888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3980810
4466988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4467088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4467188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4467288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4467388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4467488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_2_Decode((instr >> 19) & 0x7,
4467588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 24) & 0x1);
4467688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4467788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4467888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4467988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4468088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4468188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4468288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4468388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4468488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4468588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4468688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4468788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4468888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
44689d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4469088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqshrun(al,
4469188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
4469288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
4469388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rm),
4469488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
4469588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4469688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4469788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4469888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4469988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4470088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4470188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2980910
4470288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0)) {
4470388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4470488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4470588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4470688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4470788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_1_Decode((instr >> 19) & 0x7,
4470888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4470988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4471088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4471188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4471288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4471388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4471488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4471588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4471688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4471788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4471888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4471988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4472088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = dt.GetSize() - imm6;
44721d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4472288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vqshrn(al,
4472388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
4472488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4472588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm),
4472688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
4472788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4472888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4472988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000200: {
4473088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2980a10
4473188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0) ||
4473288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x80000) ||
4473388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x100000) ||
4473488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x200000)) {
4473588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4473688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4473788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4473888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4473988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_4_Decode((instr >> 19) & 0x7,
4474088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4474188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4474288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4474388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4474488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4474588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4474688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4474788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4474888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4474988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4475088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4475188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4475288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = imm6 - dt.GetSize();
44753d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4475488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vshll(al,
4475588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
4475688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
4475788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm),
4475888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm);
4475988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4476088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
447614339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4476288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4476388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4476488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4476588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4476688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4476788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00280000: {
4476888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2a80810
4476988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000300) {
4477088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4477188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2a80810
4477288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x01000000) {
4477388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4477488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2a80810
4477588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4477688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4477788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4477888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4477988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4478088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_3_Decode((instr >> 19) & 0x7);
4478188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4478288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4478388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4478488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4478588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4478688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4478788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4478888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4478988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4479088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4479188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4479288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4479388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
44794d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4479588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vshrn(al,
4479688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          dt,
4479788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4479888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm),
4479988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm);
4480088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4480188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4480288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x01000000: {
4480388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3a80810
4480488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4480588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4480688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4480788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4480888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4480988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_2_Decode((instr >> 19) & 0x7,
4481088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 24) & 0x1);
4481188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4481288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4481388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4481488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4481588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4481688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4481788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4481888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4481988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4482088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4482188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4482288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4482388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
44824d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4482588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqshrun(al,
4482688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
4482788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
4482888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rm),
4482988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
4483088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4483188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4483288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4483388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4483488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4483588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4483688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2a80910
4483788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0)) {
4483888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4483988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4484088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4484188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4484288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_1_Decode((instr >> 19) & 0x7,
4484388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4484488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4484588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4484688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4484788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4484888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4484988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4485088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4485188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4485288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4485388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4485488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4485588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = dt.GetSize() - imm6;
44856d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4485788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vqshrn(al,
4485888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
4485988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4486088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm),
4486188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
4486288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4486388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4486488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000200: {
4486588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2a80a10
4486688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0) ||
4486788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x80000) ||
4486888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x100000) ||
4486988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x200000)) {
4487088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4487188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4487288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4487388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4487488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_4_Decode((instr >> 19) & 0x7,
4487588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4487688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4487788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4487888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4487988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4488088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4488188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4488288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4488388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4488488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4488588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4488688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4488788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = imm6 - dt.GetSize();
44888d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4488988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vshll(al,
4489088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
4489188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
4489288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm),
4489388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm);
4489488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4489588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
448964339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4489788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4489888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4489988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4490088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4490188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4490288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00300000: {
4490388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2b00810
4490488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000300) {
4490588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4490688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2b00810
4490788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x01000000) {
4490888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4490988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2b00810
4491088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4491188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4491288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4491388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4491488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4491588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_3_Decode((instr >> 19) & 0x7);
4491688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4491788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4491888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4491988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4492088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4492188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4492288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4492388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4492488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4492588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4492688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4492788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4492888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
44929d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4493088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vshrn(al,
4493188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          dt,
4493288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4493388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm),
4493488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm);
4493588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4493688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4493788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x01000000: {
4493888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b00810
4493988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4494088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4494188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4494288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4494388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4494488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_2_Decode((instr >> 19) & 0x7,
4494588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 24) & 0x1);
4494688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4494788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4494888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4494988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4495088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4495188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4495288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4495388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4495488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4495588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4495688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4495788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4495888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
44959d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4496088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqshrun(al,
4496188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
4496288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
4496388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rm),
4496488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
4496588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4496688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4496788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4496888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4496988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4497088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4497188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2b00910
4497288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0)) {
4497388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4497488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4497588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4497688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4497788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_1_Decode((instr >> 19) & 0x7,
4497888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4497988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4498088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4498188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4498288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4498388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4498488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4498588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4498688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4498788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4498888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4498988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4499088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = dt.GetSize() - imm6;
44991d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4499288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vqshrn(al,
4499388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
4499488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4499588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm),
4499688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
4499788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4499888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4499988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000200: {
4500088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2b00a10
4500188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0) ||
4500288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x80000) ||
4500388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x100000) ||
4500488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x200000)) {
4500588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4500688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4500788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4500888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4500988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_4_Decode((instr >> 19) & 0x7,
4501088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4501188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4501288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4501388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4501488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4501588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4501688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4501788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4501888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4501988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4502088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4502188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4502288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = imm6 - dt.GetSize();
45023d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4502488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vshll(al,
4502588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
4502688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
4502788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm),
4502888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm);
4502988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4503088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
450314339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4503288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4503388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4503488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4503588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4503688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4503788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00380000: {
4503888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2b80810
4503988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000300) {
4504088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4504188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2b80810
4504288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x01000000) {
4504388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4504488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2b80810
4504588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4504688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4504788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4504888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4504988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4505088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_3_Decode((instr >> 19) & 0x7);
4505188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4505288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4505388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4505488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4505588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4505688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4505788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4505888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4505988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4506088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4506188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4506288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4506388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
45064d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4506588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vshrn(al,
4506688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          dt,
4506788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4506888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm),
4506988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm);
4507088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4507188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4507288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x01000000: {
4507388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3b80810
4507488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4507588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4507688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4507788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4507888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4507988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_2_Decode((instr >> 19) & 0x7,
4508088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 24) & 0x1);
4508188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4508288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4508388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4508488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4508588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4508688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4508788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4508888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4508988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4509088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4509188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4509288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4509388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
45094d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4509588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqshrun(al,
4509688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
4509788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
4509888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rm),
4509988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
4510088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4510188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4510288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4510388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4510488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4510588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4510688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2b80910
4510788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0)) {
4510888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4510988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4511088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4511188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4511288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_1_Decode((instr >> 19) & 0x7,
4511388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4511488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4511588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4511688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4511788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4511888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4511988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4512088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4512188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4512288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4512388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4512488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4512588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = dt.GetSize() - imm6;
45126d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4512788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vqshrn(al,
4512888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
4512988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4513088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm),
4513188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
4513288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4513388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4513488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000200: {
4513588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2b80a10
4513688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0) ||
4513788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x80000) ||
4513888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x100000) ||
4513988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x3f0000) == 0x200000)) {
4514088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4514188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4514288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4514388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4514488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_4_Decode((instr >> 19) & 0x7,
4514588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4514688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4514788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4514888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4514988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4515088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4515188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4515288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4515388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4515488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4515588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
4515688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4515788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = imm6 - dt.GetSize();
45158d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4515988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vshll(al,
4516088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      dt,
4516188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      QRegister(rd),
4516288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm),
4516388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      imm);
4516488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4516588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
451664339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4516788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4516888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4516988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4517088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4517188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4517288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
4517388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000300) {
4517488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4517588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800810
4517688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x01000000) {
4517788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4517888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800810
4517988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4518088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4518188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4518288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4518388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4518488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_3_Decode((instr >> 19) & 0x7);
4518588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4518688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4518788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4518888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4518988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4519088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4519188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4519288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4519388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4519488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4519588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4519688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4519788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
45198d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4519988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vshrn(al,
4520088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          dt,
4520188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rd),
4520288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rm),
4520388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm);
4520488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4520588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4520688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x01000000: {
4520788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3800810
4520888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4520988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4521088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4521188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4521288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4521388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_2_Decode((instr >> 19) & 0x7,
4521488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 24) & 0x1);
4521588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4521688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4521788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4521888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4521988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4522088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4522188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4522288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4522388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4522488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4522588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4522688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4522788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
45228d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4522988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqshrun(al,
4523088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            dt,
4523188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DRegister(rd),
4523288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QRegister(rm),
4523388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            imm);
4523488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4523588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4523688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4523788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4523888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4523988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4524088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800910
4524188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0)) {
4524288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4524388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4524488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4524588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4524688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_1_Decode((instr >> 19) & 0x7,
4524788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4524888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4524988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4525088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4525188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4525288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4525388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4525488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4525588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4525688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4525788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4525888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4525988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = dt.GetSize() - imm6;
45260d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VQSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4526188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vqshrn(al,
4526288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       dt,
4526388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
4526488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       QRegister(rm),
4526588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       imm);
4526688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4526788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4526888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000200: {
4526988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800a10
4527088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00070000) {
4527188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4527288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800a10
4527388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    switch (instr & 0x003f0000) {
4527488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00080000: {
4527588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2880a10
4527688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4527788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x180000) ||
4527888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x280000) ||
4527988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x300000) ||
4528088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x380000)) {
4528188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4528288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4528388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4528488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt = Dt_U_imm3H_1_Decode(
4528588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 19) & 0x7) |
4528688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 21) & 0x8));
4528788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4528888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4528988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4529088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4529188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4529288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4529388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4529488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4529588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4529688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4529788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4529888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4529988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMOVL{<c>}{<q>}.<dt> <Qd>, <Dm> ; A1
4530088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmovl(al,
4530188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4530288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4530388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm));
4530488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4530588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4530688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00090000: {
4530788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2890a10
4530888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4530988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4531088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4531188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4531288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4531388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4531488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4531588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4531688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4531788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4531888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4531988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4532088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4532188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4532288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4532388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4532488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4532588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4532688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4532788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4532888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4532988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4533088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4533188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4533288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4533388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45334d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4533588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4533688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4533788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4533888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4533988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4534088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4534188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4534288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x000a0000: {
4534388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf28a0a10
4534488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4534588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4534688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4534788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4534888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4534988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4535088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4535188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4535288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4535388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4535488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4535588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4535688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4535788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4535888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4535988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4536088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4536188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4536288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4536388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4536488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4536588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4536688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4536788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4536888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4536988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45370d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4537188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4537288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4537388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4537488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4537588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4537688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4537788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4537888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x000b0000: {
4537988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf28b0a10
4538088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4538188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4538288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4538388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4538488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4538588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4538688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4538788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4538888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4538988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4539088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4539188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4539288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4539388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4539488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4539588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4539688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4539788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4539888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4539988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4540088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4540188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4540288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4540388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4540488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4540588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45406d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4540788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4540888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4540988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4541088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4541188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4541288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4541388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4541488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x000c0000: {
4541588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf28c0a10
4541688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4541788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4541888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4541988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4542088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4542188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4542288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4542388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4542488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4542588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4542688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4542788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4542888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4542988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4543088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4543188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4543288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4543388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4543488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4543588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4543688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4543788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4543888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4543988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4544088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4544188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45442d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4544388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4544488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4544588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4544688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4544788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4544888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4544988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4545088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x000d0000: {
4545188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf28d0a10
4545288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4545388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4545488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4545588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4545688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4545788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4545888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4545988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4546088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4546188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4546288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4546388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4546488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4546588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4546688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4546788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4546888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4546988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4547088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4547188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4547288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4547388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4547488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4547588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4547688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4547788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45478d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4547988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4548088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4548188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4548288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4548388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4548488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4548588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4548688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x000e0000: {
4548788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf28e0a10
4548888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4548988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4549088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4549188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4549288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4549388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4549488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4549588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4549688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4549788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4549888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4549988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4550088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4550188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4550288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4550388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4550488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4550588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4550688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4550788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4550888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4550988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4551088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4551188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4551288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4551388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45514d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4551588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4551688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4551788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4551888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4551988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4552088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4552188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4552288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x000f0000: {
4552388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf28f0a10
4552488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4552588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4552688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4552788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4552888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4552988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4553088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4553188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4553288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4553388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4553488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4553588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4553688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4553788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4553888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4553988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4554088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4554188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4554288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4554388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4554488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4554588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4554688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4554788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4554888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4554988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45550d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4555188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4555288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4555388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4555488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4555588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4555688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4555788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4555888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00100000: {
4555988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2900a10
4556088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4556188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x180000) ||
4556288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x280000) ||
4556388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x300000) ||
4556488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x380000)) {
4556588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4556688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4556788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4556888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt = Dt_U_imm3H_1_Decode(
4556988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 19) & 0x7) |
4557088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 21) & 0x8));
4557188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4557288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4557388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4557488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4557588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4557688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4557788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4557888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4557988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4558088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4558188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4558288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4558388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMOVL{<c>}{<q>}.<dt> <Qd>, <Dm> ; A1
4558488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmovl(al,
4558588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4558688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4558788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm));
4558888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4558988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4559088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00110000: {
4559188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2910a10
4559288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4559388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4559488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4559588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4559688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4559788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4559888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4559988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4560088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4560188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4560288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4560388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4560488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4560588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4560688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4560788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4560888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4560988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4561088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4561188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4561288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4561388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4561488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4561588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4561688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4561788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45618d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4561988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4562088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4562188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4562288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4562388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4562488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4562588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4562688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00120000: {
4562788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2920a10
4562888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4562988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4563088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4563188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4563288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4563388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4563488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4563588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4563688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4563788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4563888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4563988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4564088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4564188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4564288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4564388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4564488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4564588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4564688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4564788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4564888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4564988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4565088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4565188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4565288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4565388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45654d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4565588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4565688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4565788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4565888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4565988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4566088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4566188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4566288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00130000: {
4566388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2930a10
4566488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4566588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4566688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4566788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4566888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4566988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4567088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4567188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4567288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4567388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4567488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4567588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4567688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4567788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4567888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4567988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4568088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4568188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4568288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4568388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4568488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4568588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4568688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4568788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4568888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4568988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45690d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4569188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4569288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4569388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4569488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4569588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4569688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4569788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4569888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00140000: {
4569988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2940a10
4570088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4570188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4570288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4570388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4570488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4570588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4570688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4570788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4570888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4570988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4571088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4571188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4571288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4571388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4571488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4571588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4571688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4571788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4571888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4571988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4572088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4572188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4572288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4572388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4572488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4572588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45726d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4572788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4572888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4572988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4573088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4573188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4573288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4573388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4573488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00150000: {
4573588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2950a10
4573688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4573788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4573888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4573988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4574088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4574188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4574288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4574388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4574488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4574588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4574688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4574788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4574888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4574988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4575088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4575188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4575288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4575388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4575488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4575588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4575688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4575788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4575888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4575988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4576088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4576188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45762d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4576388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4576488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4576588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4576688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4576788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4576888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4576988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4577088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00160000: {
4577188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2960a10
4577288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4577388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4577488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4577588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4577688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4577788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4577888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4577988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4578088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4578188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4578288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4578388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4578488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4578588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4578688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4578788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4578888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4578988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4579088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4579188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4579288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4579388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4579488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4579588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4579688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4579788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45798d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4579988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4580088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4580188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4580288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4580388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4580488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4580588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4580688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00170000: {
4580788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2970a10
4580888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4580988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4581088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4581188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4581288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4581388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4581488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4581588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4581688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4581788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4581888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4581988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4582088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4582188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4582288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4582388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4582488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4582588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4582688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4582788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4582888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4582988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4583088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4583188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4583288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4583388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45834d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4583588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4583688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4583788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4583888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4583988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4584088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4584188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4584288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00180000: {
4584388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2980a10
4584488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4584588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4584688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4584788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4584888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4584988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4585088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4585188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4585288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4585388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4585488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4585588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4585688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4585788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4585888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4585988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4586088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4586188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4586288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4586388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4586488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4586588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4586688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4586788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4586888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4586988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45870d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4587188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4587288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4587388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4587488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4587588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4587688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4587788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4587888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00190000: {
4587988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2990a10
4588088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4588188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4588288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4588388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4588488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4588588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4588688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4588788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4588888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4588988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4589088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4589188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4589288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4589388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4589488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4589588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4589688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4589788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4589888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4589988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4590088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4590188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4590288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4590388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4590488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4590588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45906d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4590788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4590888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4590988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4591088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4591188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4591288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4591388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4591488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x001a0000: {
4591588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf29a0a10
4591688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4591788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4591888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4591988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4592088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4592188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4592288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4592388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4592488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4592588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4592688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4592788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4592888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4592988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4593088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4593188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4593288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4593388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4593488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4593588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4593688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4593788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4593888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4593988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4594088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4594188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45942d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4594388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4594488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4594588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4594688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4594788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4594888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4594988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4595088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x001b0000: {
4595188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf29b0a10
4595288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4595388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4595488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4595588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4595688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4595788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4595888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4595988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4596088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4596188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4596288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4596388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4596488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4596588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4596688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4596788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4596888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4596988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4597088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4597188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4597288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4597388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4597488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4597588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4597688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4597788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
45978d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4597988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4598088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4598188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4598288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4598388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4598488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4598588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4598688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x001c0000: {
4598788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf29c0a10
4598888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4598988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4599088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4599188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4599288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4599388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4599488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4599588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4599688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4599788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4599888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4599988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4600088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4600188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4600288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4600388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4600488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4600588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4600688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4600788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4600888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4600988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4601088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4601188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4601288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4601388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46014d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4601588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4601688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4601788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4601888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4601988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4602088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4602188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4602288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x001d0000: {
4602388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf29d0a10
4602488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4602588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4602688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4602788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4602888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4602988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4603088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4603188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4603288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4603388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4603488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4603588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4603688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4603788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4603888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4603988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4604088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4604188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4604288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4604388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4604488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4604588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4604688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4604788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4604888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4604988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46050d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4605188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4605288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4605388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4605488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4605588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4605688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4605788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4605888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x001e0000: {
4605988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf29e0a10
4606088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4606188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4606288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4606388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4606488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4606588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4606688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4606788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4606888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4606988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4607088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4607188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4607288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4607388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4607488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4607588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4607688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4607788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4607888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4607988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4608088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4608188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4608288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4608388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4608488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4608588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46086d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4608788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4608888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4608988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4609088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4609188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4609288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4609388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4609488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x001f0000: {
4609588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf29f0a10
4609688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4609788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4609888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4609988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4610088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4610188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4610288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4610388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4610488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4610588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4610688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4610788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4610888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4610988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4611088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4611188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4611288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4611388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4611488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4611588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4611688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4611788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4611888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4611988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4612088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4612188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46122d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4612388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4612488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4612588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4612688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4612788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4612888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4612988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4613088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00200000: {
4613188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a00a10
4613288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4613388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x180000) ||
4613488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x280000) ||
4613588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x300000) ||
4613688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x380000) == 0x380000)) {
4613788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4613888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4613988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4614088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt = Dt_U_imm3H_1_Decode(
4614188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 19) & 0x7) |
4614288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr >> 21) & 0x8));
4614388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4614488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4614588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4614688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4614788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4614888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4614988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4615088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4615188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4615288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4615388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4615488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4615588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMOVL{<c>}{<q>}.<dt> <Qd>, <Dm> ; A1
4615688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmovl(al,
4615788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4615888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4615988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm));
4616088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4616188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4616288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00210000: {
4616388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a10a10
4616488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4616588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4616688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4616788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4616888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4616988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4617088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4617188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4617288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4617388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4617488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4617588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4617688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4617788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4617888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4617988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4618088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4618188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4618288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4618388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4618488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4618588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4618688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4618788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4618888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4618988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46190d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4619188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4619288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4619388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4619488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4619588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4619688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4619788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4619888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00220000: {
4619988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a20a10
4620088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4620188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4620288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4620388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4620488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4620588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4620688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4620788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4620888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4620988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4621088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4621188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4621288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4621388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4621488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4621588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4621688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4621788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4621888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4621988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4622088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4622188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4622288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4622388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4622488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4622588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46226d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4622788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4622888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4622988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4623088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4623188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4623288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4623388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4623488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00230000: {
4623588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a30a10
4623688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4623788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4623888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4623988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4624088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4624188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4624288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4624388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4624488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4624588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4624688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4624788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4624888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4624988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4625088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4625188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4625288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4625388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4625488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4625588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4625688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4625788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4625888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4625988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4626088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4626188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46262d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4626388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4626488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4626588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4626688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4626788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4626888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4626988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4627088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00240000: {
4627188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a40a10
4627288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4627388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4627488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4627588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4627688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4627788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4627888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4627988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4628088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4628188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4628288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4628388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4628488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4628588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4628688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4628788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4628888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4628988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4629088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4629188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4629288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4629388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4629488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4629588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4629688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4629788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46298d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4629988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4630088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4630188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4630288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4630388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4630488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4630588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4630688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00250000: {
4630788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a50a10
4630888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4630988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4631088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4631188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4631288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4631388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4631488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4631588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4631688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4631788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4631888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4631988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4632088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4632188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4632288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4632388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4632488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4632588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4632688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4632788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4632888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4632988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4633088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4633188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4633288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4633388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46334d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4633588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4633688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4633788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4633888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4633988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4634088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4634188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4634288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00260000: {
4634388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a60a10
4634488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4634588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4634688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4634788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4634888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4634988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4635088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4635188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4635288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4635388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4635488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4635588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4635688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4635788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4635888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4635988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4636088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4636188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4636288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4636388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4636488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4636588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4636688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4636788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4636888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4636988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46370d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4637188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4637288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4637388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4637488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4637588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4637688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4637788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4637888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00270000: {
4637988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a70a10
4638088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4638188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4638288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4638388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4638488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4638588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4638688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4638788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4638888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4638988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4639088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4639188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4639288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4639388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4639488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4639588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4639688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4639788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4639888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4639988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4640088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4640188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4640288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4640388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4640488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4640588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46406d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4640788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4640888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4640988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4641088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4641188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4641288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4641388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4641488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00280000: {
4641588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a80a10
4641688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4641788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4641888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4641988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4642088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4642188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4642288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4642388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4642488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4642588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4642688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4642788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4642888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4642988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4643088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4643188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4643288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4643388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4643488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4643588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4643688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4643788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4643888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4643988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4644088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4644188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46442d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4644388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4644488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4644588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4644688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4644788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4644888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4644988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4645088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00290000: {
4645188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2a90a10
4645288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4645388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4645488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4645588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4645688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4645788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4645888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4645988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4646088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4646188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4646288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4646388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4646488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4646588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4646688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4646788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4646888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4646988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4647088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4647188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4647288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4647388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4647488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4647588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4647688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4647788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46478d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4647988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4648088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4648188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4648288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4648388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4648488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4648588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4648688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x002a0000: {
4648788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2aa0a10
4648888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4648988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4649088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4649188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4649288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4649388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4649488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4649588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4649688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4649788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4649888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4649988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4650088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4650188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4650288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4650388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4650488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4650588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4650688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4650788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4650888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4650988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4651088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4651188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4651288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4651388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46514d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4651588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4651688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4651788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4651888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4651988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4652088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4652188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4652288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x002b0000: {
4652388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2ab0a10
4652488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4652588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4652688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4652788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4652888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4652988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4653088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4653188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4653288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4653388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4653488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4653588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4653688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4653788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4653888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4653988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4654088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4654188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4654288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4654388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4654488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4654588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4654688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4654788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4654888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4654988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46550d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4655188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4655288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4655388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4655488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4655588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4655688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4655788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4655888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x002c0000: {
4655988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2ac0a10
4656088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4656188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4656288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4656388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4656488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4656588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4656688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4656788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4656888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4656988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4657088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4657188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4657288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4657388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4657488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4657588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4657688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4657788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4657888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4657988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4658088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4658188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4658288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4658388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4658488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4658588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46586d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4658788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4658888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4658988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4659088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4659188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4659288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4659388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4659488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x002d0000: {
4659588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2ad0a10
4659688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4659788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4659888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4659988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4660088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4660188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4660288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4660388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4660488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4660588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4660688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4660788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4660888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4660988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4661088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4661188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4661288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4661388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4661488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4661588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4661688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4661788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4661888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4661988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4662088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4662188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46622d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4662388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4662488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4662588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4662688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4662788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4662888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4662988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4663088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x002e0000: {
4663188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2ae0a10
4663288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4663388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4663488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4663588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4663688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4663788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4663888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4663988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4664088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4664188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4664288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4664388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4664488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4664588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4664688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4664788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4664888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4664988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4665088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4665188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4665288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4665388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4665488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4665588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4665688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4665788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46658d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4665988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4666088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4666188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4666288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4666388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4666488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4666588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4666688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x002f0000: {
4666788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2af0a10
4666888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4666988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4667088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4667188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4667288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4667388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4667488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4667588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4667688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4667788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4667888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4667988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4668088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4668188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4668288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4668388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4668488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4668588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4668688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4668788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4668888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4668988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4669088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4669188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4669288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4669388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46694d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4669588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4669688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4669788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4669888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4669988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4670088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4670188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4670288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00300000: {
4670388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b00a10
4670488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4670588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4670688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4670788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4670888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4670988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4671088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4671188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4671288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4671388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4671488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4671588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4671688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4671788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4671888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4671988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4672088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4672188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4672288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4672388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4672488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4672588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4672688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4672788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4672888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4672988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46730d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4673188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4673288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4673388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4673488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4673588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4673688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4673788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4673888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00310000: {
4673988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b10a10
4674088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4674188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4674288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4674388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4674488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4674588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4674688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4674788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4674888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4674988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4675088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4675188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4675288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4675388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4675488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4675588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4675688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4675788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4675888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4675988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4676088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4676188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4676288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4676388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4676488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4676588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46766d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4676788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4676888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4676988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4677088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4677188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4677288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4677388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4677488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00320000: {
4677588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b20a10
4677688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4677788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4677888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4677988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4678088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4678188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4678288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4678388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4678488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4678588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4678688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4678788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4678888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4678988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4679088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4679188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4679288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4679388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4679488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4679588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4679688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4679788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4679888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4679988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4680088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4680188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46802d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4680388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4680488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4680588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4680688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4680788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4680888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4680988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4681088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00330000: {
4681188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b30a10
4681288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4681388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4681488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4681588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4681688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4681788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4681888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4681988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4682088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4682188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4682288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4682388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4682488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4682588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4682688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4682788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4682888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4682988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4683088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4683188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4683288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4683388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4683488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4683588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4683688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4683788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46838d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4683988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4684088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4684188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4684288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4684388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4684488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4684588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4684688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00340000: {
4684788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b40a10
4684888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4684988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4685088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4685188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4685288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4685388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4685488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4685588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4685688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4685788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4685888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4685988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4686088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4686188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4686288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4686388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4686488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4686588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4686688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4686788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4686888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4686988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4687088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4687188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4687288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4687388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46874d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4687588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4687688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4687788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4687888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4687988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4688088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4688188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4688288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00350000: {
4688388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b50a10
4688488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4688588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4688688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4688788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4688888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4688988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4689088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4689188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4689288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4689388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4689488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4689588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4689688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4689788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4689888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4689988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4690088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4690188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4690288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4690388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4690488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4690588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4690688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4690788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4690888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4690988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46910d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4691188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4691288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4691388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4691488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4691588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4691688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4691788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4691888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00360000: {
4691988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b60a10
4692088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4692188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4692288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4692388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4692488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4692588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4692688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4692788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4692888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4692988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4693088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4693188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4693288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4693388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4693488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4693588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4693688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4693788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4693888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4693988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4694088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4694188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4694288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4694388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4694488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4694588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46946d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4694788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4694888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4694988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4695088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4695188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4695288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4695388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4695488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00370000: {
4695588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b70a10
4695688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4695788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4695888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4695988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4696088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4696188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4696288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4696388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4696488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4696588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4696688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4696788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4696888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4696988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4697088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4697188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4697288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4697388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4697488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4697588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4697688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4697788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4697888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4697988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4698088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4698188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
46982d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4698388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4698488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4698588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4698688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4698788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4698888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4698988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4699088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00380000: {
4699188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b80a10
4699288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4699388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4699488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4699588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4699688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4699788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4699888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4699988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4700088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4700188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4700288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4700388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4700488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4700588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4700688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4700788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4700888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4700988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4701088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4701188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4701288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4701388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4701488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4701588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4701688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4701788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
47018d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4701988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4702088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4702188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4702288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4702388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4702488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4702588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4702688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00390000: {
4702788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2b90a10
4702888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4702988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4703088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4703188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4703288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4703388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4703488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4703588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4703688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4703788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4703888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4703988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4704088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4704188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4704288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4704388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4704488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4704588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4704688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4704788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4704888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4704988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4705088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4705188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4705288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4705388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
47054d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4705588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4705688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4705788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4705888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4705988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4706088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4706188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4706288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x003a0000: {
4706388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2ba0a10
4706488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4706588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4706688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4706788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4706888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4706988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4707088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4707188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4707288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4707388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4707488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4707588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4707688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4707788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4707888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4707988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4708088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4708188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4708288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4708388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4708488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4708588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4708688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4708788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4708888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4708988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
47090d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4709188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4709288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4709388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4709488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4709588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4709688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4709788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4709888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x003b0000: {
4709988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2bb0a10
4710088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4710188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4710288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4710388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4710488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4710588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4710688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4710788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4710888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4710988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4711088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4711188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4711288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4711388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4711488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4711588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4711688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4711788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4711888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4711988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4712088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4712188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4712288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4712388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4712488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4712588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
47126d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4712788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4712888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4712988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4713088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4713188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4713288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4713388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4713488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x003c0000: {
4713588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2bc0a10
4713688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4713788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4713888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4713988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4714088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4714188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4714288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4714388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4714488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4714588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4714688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4714788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4714888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4714988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4715088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4715188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4715288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4715388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4715488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4715588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4715688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4715788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4715888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4715988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4716088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4716188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
47162d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4716388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4716488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4716588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4716688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4716788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4716888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4716988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4717088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x003d0000: {
4717188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2bd0a10
4717288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4717388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4717488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4717588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4717688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4717788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4717888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4717988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4718088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4718188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4718288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4718388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4718488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4718588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4718688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4718788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4718888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4718988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4719088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4719188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4719288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4719388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4719488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4719588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4719688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4719788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
47198d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4719988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4720088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4720188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4720288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4720388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4720488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4720588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4720688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x003e0000: {
4720788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2be0a10
4720888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4720988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4721088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4721188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4721288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4721388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4721488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4721588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4721688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4721788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4721888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4721988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4722088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4722188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4722288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4722388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4722488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4722588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4722688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4722788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4722888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4722988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4723088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4723188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4723288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4723388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
47234d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4723588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4723688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4723788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4723888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4723988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4724088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4724188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4724288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x003f0000: {
4724388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2bf0a10
4724488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x380000) == 0x0) ||
4724588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x80000) ||
4724688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x100000) ||
4724788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x3f0000) == 0x200000)) {
4724888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4724988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4725088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4725188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4725288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Dt_imm6_4_Decode((instr >> 19) &
4725388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x7,
4725488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             (instr >> 24) &
4725588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                 0x1);
4725688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4725788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4725888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4725988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4726088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4726188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4726288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4726388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4726488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4726588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4726688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rm =
4726788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 5, 0);
4726888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm6 = (instr >> 16) & 0x3f;
4726988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        uint32_t imm = imm6 - dt.GetSize();
47270d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                        // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4727188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vshll(al,
4727288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              dt,
4727388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              QRegister(rd),
4727488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(rm),
4727588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              imm);
4727688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4727788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
472784339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                      default:
4727988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        UnallocatedA32(instr);
4728088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4728188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4728288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4728388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4728488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4728588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0) ||
4728688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x3f0000) == 0x80000) ||
4728788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x3f0000) == 0x100000) ||
4728888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x3f0000) == 0x200000)) {
4728988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4729088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4729188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4729288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4729388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_4_Decode((instr >> 19) & 0x7,
4729488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 24) & 0x1);
4729588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4729688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4729788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4729888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4729988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4730088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4730188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4730288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4730388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4730488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4730588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractDRegister(instr, 5, 0);
4730688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4730788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = imm6 - dt.GetSize();
47308d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VSHLL{<c>}{<q>}.<type><size> <Qd>, <Dm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4730988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vshll(al,
4731088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          dt,
4731188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          QRegister(rd),
4731288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          DRegister(rm),
4731388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          imm);
4731488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4731588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4731688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4731788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4731888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
473194339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4732088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4732188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4732288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4732388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4732488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4732588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4732688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4732788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
473284339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
4732988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
4733088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4733188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4733288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4733388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4733488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000c00: {
4733588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800c10
4733688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000080) {
4733788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4733888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800c10
4733988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00200000) {
4734088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4734188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800c10
4734288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00180000) {
4734388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4734488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800c10
4734588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000300) {
4734688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000200: {
4734788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800e10
4734888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x920) == 0x100) ||
4734988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x520) == 0x100) ||
4735088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x820) == 0x20) ||
4735188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x420) == 0x20) ||
4735288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x220) == 0x20) ||
4735388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x120) == 0x120)) {
4735488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4735588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4735688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4735788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = ((instr >> 8) & 0xf) |
4735888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     ((instr >> 1) & 0x10);
4735988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4736088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeDt(cmode);
4736188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4736288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4736388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4736488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4736588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4736688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4736788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DOperand imm =
4736888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeImmediate(
4736988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4737088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4737188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4737288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4737388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4737488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmov(al, dt, DRegister(rd), imm);
4737588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4737688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4737788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000300: {
4737888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800f10
4737988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x920) == 0x100) ||
4738088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x520) == 0x100) ||
4738188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x820) == 0x20) ||
4738288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x420) == 0x20) ||
4738388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x220) == 0x20) ||
4738488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x120) == 0x120)) {
4738588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4738688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4738788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4738888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = ((instr >> 8) & 0xf) |
4738988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     ((instr >> 1) & 0x10);
4739088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4739188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeDt(cmode);
4739288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4739388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4739488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4739588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4739688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4739788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4739888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DOperand imm =
4739988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeImmediate(
4740088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4740188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4740288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4740388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4740488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4740588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmov(al, dt, DRegister(rd), imm);
4740688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4740788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4740888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4740988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    switch (instr & 0x00000020) {
4741088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00000020: {
4741188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2800c30
4741288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        switch (instr & 0x00000f20) {
4741388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000000: {
4741488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c10
4741588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4741688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4741788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4741888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4741988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4742088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4742188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4742288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4742388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4742488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4742588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4742688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4742788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4742888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4742988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4743088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4743188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4743288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4743388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4743488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4743588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4743688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4743788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4743888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4743988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4744088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47441d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4744288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4744388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4744488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4744588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000020: {
4744688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c30
4744788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4744888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4744988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4745088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4745188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4745288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4745388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4745488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4745588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4745688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4745788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4745888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4745988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4746088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4746188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4746288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4746388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4746488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4746588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4746688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4746788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4746888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47469d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4747088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, DRegister(rd), imm);
4747188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4747288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4747388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000200: {
4747488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e10
4747588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4747688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4747788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4747888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4747988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4748088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4748188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4748288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4748388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4748488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4748588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4748688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4748788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4748888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4748988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4749088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4749188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4749288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4749388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4749488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4749588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4749688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4749788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4749888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4749988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4750088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47501d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4750288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4750388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4750488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4750588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000220: {
4750688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e30
4750788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4750888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4750988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4751088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4751188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4751288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4751388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4751488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4751588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4751688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4751788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4751888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4751988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4752088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4752188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4752288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4752388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4752488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4752588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4752688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4752788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4752888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47529d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4753088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, DRegister(rd), imm);
4753188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4753288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4753388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000400: {
4753488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c10
4753588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4753688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4753788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4753888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4753988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4754088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4754188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4754288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4754388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4754488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4754588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4754688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4754788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4754888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4754988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4755088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4755188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4755288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4755388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4755488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4755588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4755688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4755788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4755888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4755988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4756088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47561d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4756288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4756388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4756488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4756588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000420: {
4756688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c30
4756788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4756888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4756988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4757088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4757188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4757288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4757388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4757488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4757588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4757688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4757788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4757888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4757988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4758088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4758188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4758288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4758388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4758488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4758588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4758688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4758788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4758888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47589d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4759088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, DRegister(rd), imm);
4759188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4759288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4759388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000600: {
4759488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e10
4759588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4759688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4759788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4759888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4759988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4760088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4760188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4760288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4760388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4760488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4760588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4760688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4760788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4760888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4760988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4761088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4761188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4761288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4761388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4761488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4761588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4761688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4761788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4761888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4761988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4762088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47621d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4762288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4762388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4762488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4762588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000620: {
4762688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e30
4762788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4762888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4762988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4763088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4763188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4763288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4763388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4763488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4763588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4763688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4763788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4763888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4763988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4764088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4764188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4764288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4764388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4764488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4764588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4764688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4764788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4764888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47649d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4765088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, DRegister(rd), imm);
4765188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4765288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4765388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000800: {
4765488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c10
4765588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4765688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4765788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4765888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4765988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4766088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4766188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4766288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4766388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4766488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4766588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4766688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4766788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4766888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4766988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4767088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4767188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4767288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4767388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4767488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4767588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4767688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4767788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4767888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4767988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4768088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47681d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4768288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4768388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4768488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4768588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000820: {
4768688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c30
4768788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4768888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4768988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4769088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4769188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4769288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4769388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4769488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4769588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4769688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4769788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4769888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4769988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4770088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4770188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4770288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4770388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4770488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4770588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4770688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4770788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4770888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47709d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4771088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, DRegister(rd), imm);
4771188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4771288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4771388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000a00: {
4771488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e10
4771588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4771688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4771788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4771888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4771988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4772088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4772188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4772288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4772388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4772488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4772588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4772688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4772788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4772888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4772988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4773088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4773188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4773288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4773388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4773488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4773588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4773688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4773788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4773888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4773988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4774088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47741d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4774288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4774388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4774488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4774588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000a20: {
4774688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e30
4774788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4774888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4774988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4775088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4775188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4775288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4775388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4775488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4775588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4775688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4775788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4775888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4775988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4776088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4776188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4776288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4776388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4776488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4776588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4776688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4776788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4776888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47769d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4777088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, DRegister(rd), imm);
4777188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4777288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4777388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000c00: {
4777488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c10
4777588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4777688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4777788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4777888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4777988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4778088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4778188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4778288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4778388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4778488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4778588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4778688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4778788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4778888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4778988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4779088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4779188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4779288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4779388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4779488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4779588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4779688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4779788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4779888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4779988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4780088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47801d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4780288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4780388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4780488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4780588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000c20: {
4780688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c30
4780788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4780888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4780988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4781088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4781188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4781288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4781388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4781488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4781588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4781688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4781788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4781888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4781988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4782088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4782188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4782288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4782388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4782488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4782588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4782688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4782788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4782888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47829d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4783088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, DRegister(rd), imm);
4783188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4783288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4783388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000d00: {
4783488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800d10
4783588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4783688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4783788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4783888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4783988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4784088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4784188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4784288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4784388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4784488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4784588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4784688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4784788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4784888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4784988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4785088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4785188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4785288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4785388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4785488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4785588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4785688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4785788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4785888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4785988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4786088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47861d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4786288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4786388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4786488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4786588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000d20: {
4786688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800d30
4786788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4786888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4786988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4787088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4787188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4787288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4787388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4787488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4787588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4787688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4787788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4787888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4787988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4788088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4788188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4788288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4788388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4788488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4788588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4788688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4788788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4788888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47889d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4789088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, DRegister(rd), imm);
4789188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4789288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4789388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000e00: {
4789488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e10
4789588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4789688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4789788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4789888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4789988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4790088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4790188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4790288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4790388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4790488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4790588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4790688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4790788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4790888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4790988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4791088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4791188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4791288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4791388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4791488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4791588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4791688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4791788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4791888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4791988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4792088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47921d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4792288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4792388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4792488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4792588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000e20: {
4792688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e30
4792788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4792888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4792988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4793088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4793188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4793288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4793388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4793488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4793588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4793688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4793788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4793888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4793988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4794088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4794188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4794288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4794388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4794488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4794588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4794688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4794788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4794888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4794988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4795088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4795188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4795288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47953d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4795488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4795588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4795688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4795788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000f00: {
4795888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800f10
4795988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4796088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4796188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4796288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4796388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4796488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4796588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4796688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4796788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4796888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4796988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4797088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4797188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4797288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4797388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4797488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4797588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4797688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4797788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4797888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractDRegister(instr, 22, 12);
4797988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DOperand imm =
4798088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4798188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4798288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4798388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4798488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
47985d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4798688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, DRegister(rd), imm);
4798788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4798888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
479894339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                          default:
4799088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedA32(instr);
4799188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4799288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4799388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4799488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4799588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      default: {
4799688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x920) == 0x100) ||
4799788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x520) == 0x100) ||
4799888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x820) == 0x20) ||
4799988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x420) == 0x20) ||
4800088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x220) == 0x20) ||
4800188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x120) == 0x120)) {
4800288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4800388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4800488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4800588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned cmode = ((instr >> 8) & 0xf) |
4800688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 1) & 0x10);
4800788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4800888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmov::DecodeDt(cmode);
4800988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4801088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4801188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4801288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4801388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4801488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractDRegister(instr, 22, 12);
4801588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DOperand imm =
4801688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmov::DecodeImmediate(
4801788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                cmode,
4801888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                (instr & 0xf) |
4801988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 12) & 0x70) |
4802088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 17) & 0x80));
4802188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMOV{<c>}{<q>}.<dt> <Dd>, #<imm> ; A1
4802288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmov(al, dt, DRegister(rd), imm);
4802388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4802488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4802588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4802688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4802788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4802888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4802988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4803088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
480314339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4803288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4803388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4803488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4803588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4803688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4803788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
4803888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x00000200) == 0x00000200) {
4803988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x200000) == 0x0)) {
4804088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4804188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4804288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4804388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt1 = Dt_op_U_1_Decode1(
4804488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 24) & 0x1) | ((instr >> 7) & 0x2));
4804588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt1.Is(kDataTypeValueInvalid)) {
4804688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4804788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4804888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4804988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt2 = Dt_op_U_1_Decode2(
4805088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 24) & 0x1) | ((instr >> 7) & 0x2));
4805188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt2.Is(kDataTypeValueInvalid)) {
4805288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4805388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4805488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4805588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
4805688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractDRegister(instr, 5, 0);
4805788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t fbits = 64 - ((instr >> 16) & 0x3f);
48058d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VCVT{<c>}{<q>}.<dt>.<dt> <Dd>, <Dm>, #<fbits> ; A1 NOLINT(whitespace/line_length)
4805988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vcvt(al,
4806088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt1,
4806188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt2,
4806288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
4806388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rm),
4806488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   fbits);
4806588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4806688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4806788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4806888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4806988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4807088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4807188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4807288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
480734339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
4807488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
4807588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4807688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4807788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4807888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4807988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4808088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4808188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4808288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000040: {
4808388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf2800050
4808488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000c00) {
4808588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
4808688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800050
4808788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00380080) {
4808888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4808988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800050
4809088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
4809188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4809288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800050
4809388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000200) {
4809488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default: {
4809588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000020) {
4809688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000020: {
4809788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800070
4809888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xd00) == 0x100) ||
4809988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xd00) == 0x500) ||
4810088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xd00) == 0x900) ||
4810188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xe00) == 0xe00)) {
4810288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4810388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4810488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4810588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = (instr >> 8) & 0xf;
4810688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4810788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmvn::DecodeDt(cmode);
4810888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4810988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4811088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4811188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4811288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4811388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4811488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4811588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4811688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4811788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4811888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QOperand imm =
4811988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmvn::DecodeImmediate(
4812088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4812188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4812288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4812388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4812488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4812588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmvn(al, dt, QRegister(rd), imm);
4812688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4812788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4812888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4812988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x920) == 0x100) ||
4813088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x520) == 0x100) ||
4813188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x820) == 0x20) ||
4813288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x420) == 0x20) ||
4813388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x220) == 0x20) ||
4813488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x120) == 0x120)) {
4813588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4813688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4813788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4813888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = ((instr >> 8) & 0xf) |
4813988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     ((instr >> 1) & 0x10);
4814088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4814188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeDt(cmode);
4814288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4814388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4814488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4814588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4814688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4814788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4814888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4814988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4815088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4815188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4815288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QOperand imm =
4815388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeImmediate(
4815488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4815588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4815688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4815788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4815888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4815988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmov(al, dt, QRegister(rd), imm);
4816088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4816188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4816288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4816388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4816488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4816588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4816688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4816788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4816888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4816988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800150
4817088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000020) {
4817188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4817288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800150
4817388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x100) == 0x0) ||
4817488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc00) == 0xc00)) {
4817588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4817688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4817788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4817888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned cmode = (instr >> 8) & 0xf;
4817988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt = ImmediateVorr::DecodeDt(cmode);
4818088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4818188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4818288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4818388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4818488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4818588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4818688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4818788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4818888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4818988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QOperand imm = ImmediateVorr::DecodeImmediate(
4819088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    cmode,
4819188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (instr & 0xf) | ((instr >> 12) & 0x70) |
4819288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 17) & 0x80));
48193d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VORR{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4819488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vorr(al, dt, QRegister(rd), QRegister(rd), imm);
4819588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4819688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4819788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000020: {
4819888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800170
4819988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x100) == 0x0) ||
4820088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc00) == 0xc00)) {
4820188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4820288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4820388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4820488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned cmode = (instr >> 8) & 0xf;
4820588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt = ImmediateVbic::DecodeDt(cmode);
4820688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4820788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4820888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4820988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4821088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4821188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4821288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4821388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4821488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4821588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QOperand imm = ImmediateVbic::DecodeImmediate(
4821688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    cmode,
4821788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (instr & 0xf) | ((instr >> 12) & 0x70) |
4821888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 17) & 0x80));
48219d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VBIC{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4822088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vbic(al, dt, QRegister(rd), QRegister(rd), imm);
4822188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4822288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4822388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4822488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4822588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4822688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4822788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4822888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4822988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
4823088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000300) {
4823188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4823288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800050
4823388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4823488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4823588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4823688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4823788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4823888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4823988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4824088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4824188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4824288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4824388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4824488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4824588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4824688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4824788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4824888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4824988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4825088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4825188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4825288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4825388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4825488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4825588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4825688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4825788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4825888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6;
48259d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VSHR{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4826088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vshr(al, dt, QRegister(rd), QRegister(rm), imm);
4826188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4826288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4826388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4826488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800150
4826588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4826688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4826788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4826888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4826988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4827088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4827188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4827288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4827388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4827488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4827588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4827688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4827788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4827888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4827988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4828088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4828188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4828288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4828388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4828488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4828588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4828688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4828788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4828888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4828988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4829088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6;
48291d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VSRA{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4829288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vsra(al, dt, QRegister(rd), QRegister(rm), imm);
4829388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4829488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4829588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
4829688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800250
4829788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4829888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4829988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4830088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4830188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4830288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4830388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4830488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4830588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4830688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4830788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4830888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4830988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4831088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4831188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4831288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4831388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4831488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4831588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4831688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4831788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4831888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4831988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4832088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4832188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4832288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6;
48323d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VRSHR{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4832488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vrshr(al, dt, QRegister(rd), QRegister(rm), imm);
4832588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4832688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4832788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
4832888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800350
4832988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4833088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4833188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4833288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4833388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4833488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4833588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4833688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4833788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4833888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4833988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4834088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4834188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4834288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4834388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4834488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4834588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4834688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4834788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4834888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4834988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4835088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4835188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4835288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4835388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4835488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6;
48355d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VRSRA{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4835688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vrsra(al, dt, QRegister(rd), QRegister(rm), imm);
4835788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4835888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4835988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4836088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4836188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4836288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4836388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4836488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4836588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000400: {
4836688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800450
4836788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00380080) {
4836888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4836988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800450
4837088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
4837188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4837288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800450
4837388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000200) {
4837488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default: {
4837588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000020) {
4837688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000020: {
4837788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800470
4837888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xd00) == 0x100) ||
4837988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xd00) == 0x500) ||
4838088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xd00) == 0x900) ||
4838188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xe00) == 0xe00)) {
4838288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4838388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4838488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4838588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = (instr >> 8) & 0xf;
4838688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4838788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmvn::DecodeDt(cmode);
4838888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4838988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4839088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4839188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4839288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4839388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4839488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4839588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4839688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4839788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4839888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QOperand imm =
4839988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmvn::DecodeImmediate(
4840088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4840188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4840288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4840388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4840488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4840588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmvn(al, dt, QRegister(rd), imm);
4840688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4840788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4840888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4840988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x920) == 0x100) ||
4841088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x520) == 0x100) ||
4841188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x820) == 0x20) ||
4841288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x420) == 0x20) ||
4841388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x220) == 0x20) ||
4841488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x120) == 0x120)) {
4841588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4841688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4841788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4841888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = ((instr >> 8) & 0xf) |
4841988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     ((instr >> 1) & 0x10);
4842088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4842188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeDt(cmode);
4842288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4842388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4842488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4842588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4842688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4842788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4842888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4842988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4843088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4843188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4843288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QOperand imm =
4843388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeImmediate(
4843488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4843588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4843688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4843788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4843888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4843988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmov(al, dt, QRegister(rd), imm);
4844088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4844188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4844288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4844388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4844488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4844588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4844688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4844788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4844888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4844988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800550
4845088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000020) {
4845188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4845288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800550
4845388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x100) == 0x0) ||
4845488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc00) == 0xc00)) {
4845588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4845688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4845788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4845888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned cmode = (instr >> 8) & 0xf;
4845988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt = ImmediateVorr::DecodeDt(cmode);
4846088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4846188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4846288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4846388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4846488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4846588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4846688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4846788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4846888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4846988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QOperand imm = ImmediateVorr::DecodeImmediate(
4847088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    cmode,
4847188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (instr & 0xf) | ((instr >> 12) & 0x70) |
4847288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 17) & 0x80));
48473d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VORR{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4847488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vorr(al, dt, QRegister(rd), QRegister(rd), imm);
4847588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4847688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4847788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000020: {
4847888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800570
4847988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x100) == 0x0) ||
4848088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc00) == 0xc00)) {
4848188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4848288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4848388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4848488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned cmode = (instr >> 8) & 0xf;
4848588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt = ImmediateVbic::DecodeDt(cmode);
4848688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4848788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4848888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4848988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4849088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4849188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4849288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4849388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4849488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4849588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                QOperand imm = ImmediateVbic::DecodeImmediate(
4849688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    cmode,
4849788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (instr & 0xf) | ((instr >> 12) & 0x70) |
4849888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr >> 17) & 0x80));
48499d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VBIC{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4850088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vbic(al, dt, QRegister(rd), QRegister(rd), imm);
4850188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4850288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4850388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4850488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4850588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4850688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4850788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4850888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4850988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
4851088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000300) {
4851188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4851288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800450
4851388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x01000000) == 0x01000000) {
4851488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x380080) == 0x0)) {
4851588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4851688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4851788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4851888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt = Dt_L_imm6_4_Decode(
4851988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 19) & 0x7) | ((instr >> 4) & 0x8));
4852088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
4852188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4852288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4852388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4852488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
4852588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4852688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4852788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4852888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
4852988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
4853088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4853188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4853288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4853388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
4853488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm6 = (instr >> 16) & 0x3f;
4853588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t imm =
4853688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (dt.IsSize(64) ? 64 : (dt.GetSize() * 2)) -
4853788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  imm6;
4853888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VSRI{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #<imm> ; A1
4853988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vsri(al, dt, QRegister(rd), QRegister(rm), imm);
4854088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4854188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4854288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4854388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4854488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4854588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4854688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800550
4854788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x01000000) {
4854888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4854988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800550
4855088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380080) == 0x0)) {
4855188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4855288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4855388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4855488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4855588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_L_imm6_3_Decode(((instr >> 19) & 0x7) |
4855688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8));
4855788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4855888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4855988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4856088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4856188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4856288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4856388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4856488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4856588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4856688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4856788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4856888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4856988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4857088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4857188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4857288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm =
4857388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
48574d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VSHL{<c>}{<q>}.I<size> {<Qd>}, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4857588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vshl(al, dt, QRegister(rd), QRegister(rm), imm);
4857688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4857788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4857888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x01000000: {
4857988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf3800550
4858088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380080) == 0x0)) {
4858188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4858288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4858388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4858488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4858588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_L_imm6_4_Decode(((instr >> 19) & 0x7) |
4858688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8));
4858788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4858888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4858988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4859088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4859188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 12) & 1) != 0) {
4859288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4859388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4859488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4859588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 22, 12);
4859688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4859788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4859888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4859988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4860088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4860188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4860288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm =
4860388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
4860488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VSLI{<c>}{<q>}.<dt> {<Qd>}, <Qm>, #<imm> ; A1
4860588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vsli(al, dt, QRegister(rd), QRegister(rm), imm);
4860688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4860788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4860888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4860988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4861088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4861188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
4861288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800650
4861388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4861488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4861588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4861688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4861788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4861888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_2_Decode(((instr >> 19) & 0x7) |
4861988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4862088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4862188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4862288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4862388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4862488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4862588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4862688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4862788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4862888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4862988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4863088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4863188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4863288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4863388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4863488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4863588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4863688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4863788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
48638d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VQSHLU{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4863988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vqshlu(al, dt, QRegister(rd), QRegister(rm), imm);
4864088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4864188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4864288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
4864388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800750
4864488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x380080) == 0x0)) {
4864588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4864688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4864788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4864888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
4864988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_L_imm6_1_Decode(((instr >> 19) & 0x7) |
4865088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr >> 4) & 0x8),
4865188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   (instr >> 24) & 0x1);
4865288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4865388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4865488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4865588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4865688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr >> 12) & 1) != 0) {
4865788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4865888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4865988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4866088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractQRegister(instr, 22, 12);
4866188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 1) != 0) {
4866288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4866388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4866488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4866588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = ExtractQRegister(instr, 5, 0);
4866688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm6 = (instr >> 16) & 0x3f;
4866788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t imm =
4866888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                imm6 - (dt.IsSize(64) ? 0 : dt.GetSize());
48669d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VQSHL{<c>}{<q>}.<type><size> {<Qd>}, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4867088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vqshl(al, dt, QRegister(rd), QRegister(rm), imm);
4867188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4867288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4867388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4867488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4867588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
4867688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4867788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4867888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4867988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000800: {
4868088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800850
4868188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000080) {
4868288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4868388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800850
4868488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00380000) {
4868588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4868688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800850
4868788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000100) {
4868888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4868988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800850
4869088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000200) {
4869188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4869288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    switch (instr & 0x00000020) {
4869388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00000020: {
4869488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2800870
4869588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0xd00) == 0x100) ||
4869688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0xd00) == 0x500) ||
4869788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0xd00) == 0x900) ||
4869888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0xe00) == 0xe00)) {
4869988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4870088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4870188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4870288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned cmode = (instr >> 8) & 0xf;
4870388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4870488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmvn::DecodeDt(cmode);
4870588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4870688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4870788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4870888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4870988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4871088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4871188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4871288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4871388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4871488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4871588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QOperand imm =
4871688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmvn::DecodeImmediate(
4871788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                cmode,
4871888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                (instr & 0xf) |
4871988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 12) & 0x70) |
4872088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 17) & 0x80));
4872188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4872288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmvn(al, dt, QRegister(rd), imm);
4872388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4872488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4872588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      default: {
4872688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x920) == 0x100) ||
4872788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x520) == 0x100) ||
4872888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x820) == 0x20) ||
4872988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x420) == 0x20) ||
4873088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x220) == 0x20) ||
4873188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x120) == 0x120)) {
4873288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4873388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4873488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4873588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned cmode = ((instr >> 8) & 0xf) |
4873688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 1) & 0x10);
4873788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4873888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmov::DecodeDt(cmode);
4873988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4874088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4874188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4874288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4874388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4874488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4874588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4874688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4874788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4874888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4874988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QOperand imm =
4875088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmov::DecodeImmediate(
4875188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                cmode,
4875288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                (instr & 0xf) |
4875388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 12) & 0x70) |
4875488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 17) & 0x80));
4875588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4875688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmov(al, dt, QRegister(rd), imm);
4875788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4875888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4875988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4876088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4876188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4876288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4876388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4876488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4876588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4876688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800950
4876788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000020) {
4876888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4876988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800950
4877088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x100) == 0x0) ||
4877188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xc00) == 0xc00)) {
4877288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4877388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4877488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4877588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = (instr >> 8) & 0xf;
4877688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4877788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVorr::DecodeDt(cmode);
4877888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4877988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4878088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4878188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4878288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4878388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4878488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4878588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4878688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4878788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4878888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QOperand imm =
4878988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVorr::DecodeImmediate(
4879088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4879188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4879288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4879388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
48794d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VORR{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4879588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vorr(al,
4879688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
4879788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
4879888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
4879988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         imm);
4880088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4880188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4880288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000020: {
4880388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800970
4880488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x100) == 0x0) ||
4880588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0xc00) == 0xc00)) {
4880688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4880788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4880888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4880988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = (instr >> 8) & 0xf;
4881088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4881188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVbic::DecodeDt(cmode);
4881288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4881388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4881488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4881588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4881688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4881788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4881888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4881988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4882088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4882188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4882288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QOperand imm =
4882388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVbic::DecodeImmediate(
4882488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4882588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4882688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4882788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
48828d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VBIC{<c>}{<q>}.<dt> {<Qdn>}, <Qdn>, #<imm> ; A1 NOLINT(whitespace/line_length)
4882988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vbic(al,
4883088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
4883188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
4883288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         QRegister(rd),
4883388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         imm);
4883488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4883588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4883688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4883788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4883888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4883988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4884088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4884188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4884288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
4884388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000300) {
4884488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4884588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800850
4884688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x01000000) {
4884788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
4884888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800850
4884988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4885088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4885188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4885288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4885388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4885488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_3_Decode((instr >> 19) & 0x7);
4885588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4885688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4885788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4885888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4885988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4886088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4886188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4886288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4886388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4886488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4886588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4886688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4886788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
48868d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VRSHRN{<c>}{<q>}.I<size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4886988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vrshrn(al,
4887088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           dt,
4887188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           DRegister(rd),
4887288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           QRegister(rm),
4887388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                           imm);
4887488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4887588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4887688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x01000000: {
4887788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf3800850
4887888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x380000) == 0x0)) {
4887988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4888088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4888188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4888288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4888388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_imm6_2_Decode((instr >> 19) & 0x7,
4888488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         (instr >> 24) & 0x1);
4888588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4888688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4888788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4888888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4888988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4889088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
4889188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if ((instr & 1) != 0) {
4889288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4889388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4889488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4889588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rm = ExtractQRegister(instr, 5, 0);
4889688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm6 = (instr >> 16) & 0x3f;
4889788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    uint32_t imm = dt.GetSize() - imm6;
48898d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                    // VQRSHRUN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4889988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vqrshrun(al,
4890088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             dt,
4890188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             DRegister(rd),
4890288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             QRegister(rm),
4890388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             imm);
4890488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4890588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4890688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4890788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4890888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4890988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000100: {
4891088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800950
4891188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0x380000) == 0x0)) {
4891288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4891388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4891488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4891588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
4891688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_imm6_1_Decode((instr >> 19) & 0x7,
4891788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 24) & 0x1);
4891888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
4891988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4892088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4892188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4892288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
4892388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if ((instr & 1) != 0) {
4892488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
4892588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
4892688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4892788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractQRegister(instr, 5, 0);
4892888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm6 = (instr >> 16) & 0x3f;
4892988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                uint32_t imm = dt.GetSize() - imm6;
48930d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VQRSHRN{<c>}{<q>}.<type><size> <Dd>, <Qm>, #<imm> ; A1 NOLINT(whitespace/line_length)
4893188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vqrshrn(al,
4893288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        dt,
4893388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DRegister(rd),
4893488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QRegister(rm),
4893588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        imm);
4893688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4893788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
489384339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4893988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4894088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4894188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4894288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4894388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4894488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4894588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4894688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
489474339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
4894888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
4894988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4895088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4895188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4895288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4895388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000c00: {
4895488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf2800c50
4895588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000080) {
4895688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4895788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf2800c50
4895888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00200000) {
4895988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4896088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf2800c50
4896188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00180000) {
4896288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
4896388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf2800c50
4896488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000300) {
4896588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000200: {
4896688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800e50
4896788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x920) == 0x100) ||
4896888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x520) == 0x100) ||
4896988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x820) == 0x20) ||
4897088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x420) == 0x20) ||
4897188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x220) == 0x20) ||
4897288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x120) == 0x120)) {
4897388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4897488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4897588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4897688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = ((instr >> 8) & 0xf) |
4897788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     ((instr >> 1) & 0x10);
4897888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4897988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeDt(cmode);
4898088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4898188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4898288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4898388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4898488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4898588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4898688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4898788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4898888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4898988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4899088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QOperand imm =
4899188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeImmediate(
4899288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4899388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4899488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4899588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4899688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4899788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmov(al, dt, QRegister(rd), imm);
4899888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4899988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4900088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000300: {
4900188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf2800f50
4900288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0x920) == 0x100) ||
4900388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x520) == 0x100) ||
4900488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x820) == 0x20) ||
4900588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x420) == 0x20) ||
4900688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x220) == 0x20) ||
4900788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ((instr & 0x120) == 0x120)) {
4900888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4900988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4901088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4901188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned cmode = ((instr >> 8) & 0xf) |
4901288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     ((instr >> 1) & 0x10);
4901388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
4901488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeDt(cmode);
4901588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
4901688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4901788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4901888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4901988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr >> 12) & 1) != 0) {
4902088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
4902188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
4902288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4902388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rd =
4902488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractQRegister(instr, 22, 12);
4902588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    QOperand imm =
4902688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ImmediateVmov::DecodeImmediate(
4902788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            cmode,
4902888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (instr & 0xf) |
4902988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 12) & 0x70) |
4903088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 17) & 0x80));
4903188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4903288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmov(al, dt, QRegister(rd), imm);
4903388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4903488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4903588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default: {
4903688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    switch (instr & 0x00000020) {
4903788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x00000020: {
4903888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // 0xf2800c70
4903988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        switch (instr & 0x00000f20) {
4904088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000000: {
4904188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c50
4904288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4904388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4904488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4904588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4904688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4904788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4904888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4904988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4905088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4905188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4905288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4905388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4905488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4905588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4905688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4905788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4905888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4905988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4906088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4906188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4906288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4906388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4906488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4906588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4906688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4906788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4906888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4906988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4907088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4907188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49072d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4907388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4907488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4907588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4907688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000020: {
4907788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c70
4907888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4907988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4908088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4908188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4908288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4908388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4908488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4908588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4908688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4908788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4908888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4908988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4909088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4909188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4909288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4909388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4909488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4909588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4909688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4909788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4909888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4909988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4910088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4910188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4910288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4910388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49104d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4910588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, QRegister(rd), imm);
4910688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4910788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4910888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000200: {
4910988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e50
4911088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4911188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4911288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4911388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4911488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4911588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4911688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4911788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4911888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4911988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4912088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4912188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4912288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4912388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4912488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4912588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4912688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4912788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4912888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4912988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4913088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4913188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4913288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4913388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4913488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4913588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4913688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4913788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4913888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4913988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49140d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4914188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4914288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4914388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4914488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000220: {
4914588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e70
4914688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4914788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4914888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4914988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4915088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4915188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4915288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4915388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4915488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4915588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4915688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4915788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4915888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4915988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4916088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4916188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4916288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4916388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4916488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4916588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4916688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4916788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4916888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4916988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4917088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4917188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49172d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4917388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, QRegister(rd), imm);
4917488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4917588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4917688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000400: {
4917788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c50
4917888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4917988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4918088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4918188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4918288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4918388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4918488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4918588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4918688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4918788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4918888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4918988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4919088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4919188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4919288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4919388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4919488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4919588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4919688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4919788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4919888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4919988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4920088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4920188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4920288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4920388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4920488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4920588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4920688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4920788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49208d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4920988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4921088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4921188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4921288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000420: {
4921388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c70
4921488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4921588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4921688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4921788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4921888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4921988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4922088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4922188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4922288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4922388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4922488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4922588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4922688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4922788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4922888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4922988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4923088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4923188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4923288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4923388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4923488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4923588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4923688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4923788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4923888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4923988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49240d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4924188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, QRegister(rd), imm);
4924288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4924388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4924488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000600: {
4924588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e50
4924688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4924788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4924888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4924988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4925088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4925188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4925288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4925388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4925488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4925588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4925688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4925788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4925888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4925988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4926088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4926188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4926288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4926388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4926488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4926588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4926688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4926788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4926888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4926988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4927088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4927188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4927288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4927388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4927488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4927588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49276d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4927788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4927888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4927988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4928088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000620: {
4928188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e70
4928288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4928388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4928488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4928588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4928688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4928788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4928888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4928988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4929088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4929188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4929288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4929388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4929488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4929588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4929688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4929788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4929888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4929988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4930088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4930188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4930288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4930388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4930488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4930588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4930688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4930788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49308d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4930988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, QRegister(rd), imm);
4931088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4931188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4931288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000800: {
4931388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c50
4931488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4931588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4931688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4931788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4931888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4931988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4932088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4932188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4932288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4932388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4932488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4932588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4932688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4932788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4932888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4932988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4933088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4933188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4933288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4933388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4933488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4933588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4933688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4933788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4933888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4933988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4934088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4934188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4934288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4934388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49344d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4934588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4934688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4934788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4934888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000820: {
4934988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c70
4935088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4935188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4935288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4935388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4935488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4935588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4935688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4935788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4935888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4935988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4936088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4936188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4936288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4936388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4936488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4936588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4936688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4936788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4936888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4936988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4937088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4937188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4937288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4937388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4937488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4937588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49376d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4937788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, QRegister(rd), imm);
4937888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4937988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4938088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000a00: {
4938188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e50
4938288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4938388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4938488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4938588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4938688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4938788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4938888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4938988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4939088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4939188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4939288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4939388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4939488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4939588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4939688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4939788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4939888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4939988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4940088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4940188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4940288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4940388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4940488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4940588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4940688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4940788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4940888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4940988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4941088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4941188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49412d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4941388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4941488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4941588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4941688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000a20: {
4941788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e70
4941888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4941988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4942088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4942188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4942288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4942388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4942488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4942588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4942688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4942788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4942888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4942988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4943088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4943188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4943288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4943388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4943488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4943588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4943688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4943788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4943888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4943988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4944088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4944188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4944288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4944388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49444d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4944588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, QRegister(rd), imm);
4944688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4944788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4944888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000c00: {
4944988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c50
4945088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4945188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4945288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4945388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4945488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4945588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4945688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4945788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4945888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4945988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4946088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4946188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4946288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4946388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4946488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4946588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4946688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4946788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4946888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4946988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4947088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4947188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4947288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4947388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4947488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4947588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4947688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4947788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4947888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4947988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49480d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4948188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4948288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4948388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4948488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000c20: {
4948588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800c70
4948688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4948788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4948888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4948988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4949088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4949188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4949288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4949388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4949488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4949588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4949688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4949788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4949888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4949988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4950088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4950188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4950288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4950388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4950488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4950588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4950688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4950788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4950888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4950988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4951088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4951188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49512d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4951388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, QRegister(rd), imm);
4951488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4951588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4951688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000d00: {
4951788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800d50
4951888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4951988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4952088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4952188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4952288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4952388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4952488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4952588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4952688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4952788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4952888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4952988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4953088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4953188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4953288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4953388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4953488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4953588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4953688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4953788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4953888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4953988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4954088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4954188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4954288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4954388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4954488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4954588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4954688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4954788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49548d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4954988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4955088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4955188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4955288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000d20: {
4955388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800d70
4955488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0xd00) == 0x100) ||
4955588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x500) ||
4955688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xd00) == 0x900) ||
4955788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0xe00) == 0xe00)) {
4955888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4955988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4956088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4956188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode = (instr >> 8) & 0xf;
4956288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4956388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeDt(cmode);
4956488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4956588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4956688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4956788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4956888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4956988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4957088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4957188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4957288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4957388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4957488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4957588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmvn::DecodeImmediate(
4957688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4957788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4957888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4957988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49580d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMVN{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4958188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmvn(al, dt, QRegister(rd), imm);
4958288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4958388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4958488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000e00: {
4958588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e50
4958688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4958788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4958888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4958988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4959088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4959188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4959288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4959388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4959488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4959588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4959688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4959788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4959888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4959988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4960088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4960188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4960288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4960388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4960488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4960588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4960688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4960788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4960888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4960988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4961088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4961188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4961288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4961388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4961488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4961588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49616d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4961788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4961888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4961988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4962088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000e20: {
4962188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800e70
4962288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4962388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4962488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4962588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4962688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4962788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4962888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4962988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4963088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4963188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4963288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4963388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4963488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4963588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4963688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4963788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4963888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4963988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4964088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4964188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4964288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4964388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4964488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4964588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4964688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4964788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4964888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4964988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4965088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4965188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49652d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4965388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4965488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4965588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
4965688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          case 0x00000f00: {
4965788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            // 0xf2800f50
4965888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr & 0x920) == 0x100) ||
4965988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x520) == 0x100) ||
4966088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x820) == 0x20) ||
4966188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x420) == 0x20) ||
4966288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x220) == 0x20) ||
4966388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr & 0x120) == 0x120)) {
4966488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4966588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4966688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4966788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned cmode =
4966888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 8) & 0xf) |
4966988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ((instr >> 1) & 0x10);
4967088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            DataType dt =
4967188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeDt(cmode);
4967288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (dt.Is(kDataTypeValueInvalid)) {
4967388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4967488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4967588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4967688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            if (((instr >> 12) & 1) != 0) {
4967788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              UnallocatedA32(instr);
4967888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              return;
4967988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            }
4968088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            unsigned rd =
4968188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ExtractQRegister(instr, 22, 12);
4968288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            QOperand imm =
4968388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                ImmediateVmov::DecodeImmediate(
4968488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    cmode,
4968588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr & 0xf) |
4968688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 12) & 0x70) |
4968788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        ((instr >> 17) & 0x80));
49688d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                            // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1 NOLINT(whitespace/line_length)
4968988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            vmov(al, dt, QRegister(rd), imm);
4969088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4969188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          }
496924339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                                          default:
4969388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            UnallocatedA32(instr);
4969488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            break;
4969588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4969688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4969788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4969888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      default: {
4969988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr & 0x920) == 0x100) ||
4970088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x520) == 0x100) ||
4970188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x820) == 0x20) ||
4970288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x420) == 0x20) ||
4970388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x220) == 0x20) ||
4970488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ((instr & 0x120) == 0x120)) {
4970588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4970688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4970788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4970888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned cmode = ((instr >> 8) & 0xf) |
4970988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                         ((instr >> 1) & 0x10);
4971088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        DataType dt =
4971188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmov::DecodeDt(cmode);
4971288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (dt.Is(kDataTypeValueInvalid)) {
4971388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4971488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4971588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4971688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        if (((instr >> 12) & 1) != 0) {
4971788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          UnallocatedA32(instr);
4971888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          return;
4971988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        }
4972088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        unsigned rd =
4972188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ExtractQRegister(instr, 22, 12);
4972288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        QOperand imm =
4972388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            ImmediateVmov::DecodeImmediate(
4972488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                cmode,
4972588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                (instr & 0xf) |
4972688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 12) & 0x70) |
4972788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 17) & 0x80));
4972888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        // VMOV{<c>}{<q>}.<dt> <Qd>, #<imm> ; A1
4972988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        vmov(al, dt, QRegister(rd), imm);
4973088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
4973188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      }
4973288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
4973388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
4973488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
4973588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
4973688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4973788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
497384339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
4973988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4974088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4974188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4974288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4974388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4974488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
4974588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x00000200) == 0x00000200) {
4974688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0x200000) == 0x0)) {
4974788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4974888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4974988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4975088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt1 = Dt_op_U_1_Decode1(
4975188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 24) & 0x1) | ((instr >> 7) & 0x2));
4975288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt1.Is(kDataTypeValueInvalid)) {
4975388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4975488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4975588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4975688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt2 = Dt_op_U_1_Decode2(
4975788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  ((instr >> 24) & 0x1) | ((instr >> 7) & 0x2));
4975888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt2.Is(kDataTypeValueInvalid)) {
4975988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4976088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4976188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4976288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr >> 12) & 1) != 0) {
4976388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4976488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4976588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4976688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractQRegister(instr, 22, 12);
4976788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((instr & 1) != 0) {
4976888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
4976988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
4977088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
4977188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractQRegister(instr, 5, 0);
4977288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              uint32_t fbits = 64 - ((instr >> 16) & 0x3f);
49773d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                              // VCVT{<c>}{<q>}.<dt>.<dt> <Qd>, <Qm>, #<fbits> ; A1 NOLINT(whitespace/line_length)
4977488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vcvt(al,
4977588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt1,
4977688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt2,
4977788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rd),
4977888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   QRegister(rm),
4977988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   fbits);
4978088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
4978188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4978288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4978388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4978488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4978588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
4978688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4978788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
497884339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
4978988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
4979088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
4979188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
4979288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
4979388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
4979488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
4979588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
4979688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
4979788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
4979888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
4979988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
4980088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
4980188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
4980288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
4980388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x04000000: {
4980488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0xf4000000
4980588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01300000) {
4980688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
4980788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf4000000
4980888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800000) {
4980988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
4981088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf4000000
4981188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x0000000d) {
4981288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x0000000d: {
4981388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf400000d
4981488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000002) {
4981588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
4981688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf400000d
4981788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000f00) {
4981888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
4981988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400000d
4982088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
4982188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4982288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4982388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4982488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4982588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
4982688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_4_Decode((instr >> 4) & 0x3);
4982788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
4982888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
4982988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4983088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4983188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4983288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
4983388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
4983488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
4983588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
4983688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
4983788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
4983888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
4983988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
4984088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
4984188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4984288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
4984388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
4984488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
4984588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4984688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4984788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
4984888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
4984988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
4985088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
4985188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
49852d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
4985388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst4(al,
4985488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4985588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
4985688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
4985788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
4985888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
4985988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
4986088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
4986188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
4986288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4986388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4986488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
4986588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400010d
4986688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
4986788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4986888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4986988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4987088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4987188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
4987288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_4_Decode((instr >> 4) & 0x3);
4987388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
4987488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
4987588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4987688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4987788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4987888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
4987988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
4988088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
4988188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
4988288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
4988388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
4988488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
4988588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
4988688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
4988788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4988888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
4988988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
4989088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
4989188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4989288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4989388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
4989488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
4989588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
4989688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
4989788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
49898d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
4989988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst4(al,
4990088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4990188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
4990288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
4990388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
4990488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
4990588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
4990688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
4990788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
4990888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4990988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4991088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
4991188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400020d
4991288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
4991388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
4991488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4991588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4991688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4991788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
4991888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4991988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4992088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4992188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4992288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
4992388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_5_Decode((instr >> 4) & 0x3);
4992488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
4992588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
4992688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4992788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4992888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4992988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
4993088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
4993188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
4993288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
4993388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
4993488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
4993588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
4993688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
4993788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4993888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
4993988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
4994088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4994188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
4994288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
4994388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4994488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
4994588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
4994688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4994788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4994888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
4994988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
4995088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
49951d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
4995288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
4995388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
4995488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
4995588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
4995688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
4995788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
4995888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
4995988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
4996088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
4996188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
4996288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
4996388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
4996488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400030d
4996588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
4996688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4996788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4996888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4996988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
4997088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
4997188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4997288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4997388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4997488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
4997588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
4997688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
4997788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
4997888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
4997988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
4998088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
4998188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
4998288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
4998388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
4998488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
4998588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
4998688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
4998788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
4998888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
4998988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
4999088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4999188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
4999288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
4999388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
4999488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4999588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
4999688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
4999788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
4999888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
4999988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5000088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5000188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5000288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5000388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5000488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
50005d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5000688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst2(al,
5000788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5000888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5000988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5001088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5001188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5001288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5001388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5001488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5001588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5001688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5001788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000400: {
5001888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400040d
5001988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x20) == 0x20)) {
5002088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5002188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5002288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5002388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5002488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5002588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5002688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5002788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5002888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5002988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_3_Decode((instr >> 4) & 0x3);
5003088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5003188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5003288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5003388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5003488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5003588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5003688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5003788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5003888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5003988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5004088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5004188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x4:
5004288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5004388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5004488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5004588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x5:
5004688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5004788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5004888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5004988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5005088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5005188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5005288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5005388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5005488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
50055d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5005688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst3(al,
5005788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5005888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5005988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5006088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5006188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5006288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5006388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5006488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5006588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5006688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5006788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000500: {
5006888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400050d
5006988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x20) == 0x20)) {
5007088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5007188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5007288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5007388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5007488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5007588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5007688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5007788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5007888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5007988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_3_Decode((instr >> 4) & 0x3);
5008088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5008188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5008288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5008388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5008488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5008588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5008688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5008788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5008888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5008988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5009088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5009188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x4:
5009288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5009388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5009488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5009588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x5:
5009688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5009788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5009888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5009988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5010088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5010188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5010288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5010388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5010488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
50105d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5010688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst3(al,
5010788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5010888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5010988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5011088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5011188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5011288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5011388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5011488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5011588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5011688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5011788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000600: {
5011888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400060d
5011988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5012088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5012188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5012288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5012388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5012488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5012588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5012688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5012788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5012888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5012988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5013088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_5_Decode((instr >> 4) & 0x3);
5013188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5013288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5013388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5013488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5013588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5013688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5013788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5013888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5013988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5014088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5014188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5014288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5014388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5014488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5014588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5014688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5014788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5014888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5014988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5015088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5015188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5015288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5015388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5015488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5015588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5015688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5015788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
50158d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5015988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
5016088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5016188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5016288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5016388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5016488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5016588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5016688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5016788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5016888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5016988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5017088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000700: {
5017188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400070d
5017288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5017388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5017488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5017588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5017688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5017788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5017888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5017988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5018088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5018188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5018288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5018388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_5_Decode((instr >> 4) & 0x3);
5018488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5018588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5018688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5018788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5018888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5018988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5019088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5019188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5019288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5019388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5019488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5019588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5019688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5019788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5019888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5019988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5020088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5020188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5020288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5020388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5020488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5020588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5020688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5020788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5020888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5020988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5021088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
50211d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5021288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
5021388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5021488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5021588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5021688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5021788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5021888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5021988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5022088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5022188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5022288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5022388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000800: {
5022488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400080d
5022588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5022688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5022788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5022888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5022988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5023088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5023188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5023288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5023388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5023488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5023588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5023688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5023788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5023888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5023988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5024088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5024188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5024288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5024388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5024488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5024588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5024688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5024788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5024888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5024988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5025088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5025188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5025288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5025388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5025488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5025588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5025688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5025788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5025888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5025988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5026088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5026188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5026288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5026388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5026488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
50265d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5026688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst2(al,
5026788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5026888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5026988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5027088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5027188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5027288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5027388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5027488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5027588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5027688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5027788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000900: {
5027888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400090d
5027988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5028088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5028188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5028288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5028388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5028488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5028588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5028688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5028788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5028888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5028988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5029088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5029188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5029288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5029388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5029488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5029588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5029688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5029788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5029888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5029988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5030088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5030188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5030288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5030388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5030488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5030588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5030688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5030788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5030888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5030988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5031088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5031188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5031288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5031388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5031488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5031588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5031688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5031788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5031888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
50319d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5032088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst2(al,
5032188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5032288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5032388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5032488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5032588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5032688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5032788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5032888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5032988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5033088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5033188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000a00: {
5033288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4000a0d
5033388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5033488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5033588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5033688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5033788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5033888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5033988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5034088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5034188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5034288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5034388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5034488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_5_Decode((instr >> 4) & 0x3);
5034588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5034688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5034788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5034888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5034988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5035088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5035188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5035288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5035388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5035488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5035588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5035688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5035788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5035888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5035988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5036088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5036188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5036288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5036388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5036488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5036588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5036688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5036788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5036888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5036988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5037088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5037188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
50372d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5037388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
5037488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5037588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5037688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5037788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5037888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5037988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5038088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5038188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5038288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5038388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
503844339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
5038588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
5038688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5038788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5038888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5038988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5039088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000002: {
5039188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf400000f
5039288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000f00) {
5039388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
5039488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400000d
5039588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5039688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5039788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5039888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5039988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5040088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5040188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_4_Decode((instr >> 4) & 0x3);
5040288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5040388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5040488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5040588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5040688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5040788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5040888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5040988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5041088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5041188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5041288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5041388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5041488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5041588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5041688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5041788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5041888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5041988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5042088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5042188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5042288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5042388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5042488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5042588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5042688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5042788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5042888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst4(al,
5042988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5043088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5043188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5043288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5043388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5043488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5043588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5043688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5043788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5043888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5043988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
5044088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400010d
5044188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5044288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5044388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5044488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5044588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5044688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5044788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_4_Decode((instr >> 4) & 0x3);
5044888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5044988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5045088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5045188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5045288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5045388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5045488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5045588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5045688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5045788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5045888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5045988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5046088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5046188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5046288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5046388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5046488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5046588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5046688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5046788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5046888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5046988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5047088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5047188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5047288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5047388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5047488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst4(al,
5047588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5047688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5047788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5047888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5047988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5048088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5048188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5048288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5048388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5048488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5048588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
5048688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400020d
5048788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5048888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5048988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5049088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5049188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5049288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5049388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5049488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5049588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5049688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5049788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5049888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_5_Decode((instr >> 4) & 0x3);
5049988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5050088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5050188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5050288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5050388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5050488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5050588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5050688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5050788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5050888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5050988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5051088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5051188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5051288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5051388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5051488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5051588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5051688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5051788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5051888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5051988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5052088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5052188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5052288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5052388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5052488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5052588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5052688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5052788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
5052888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5052988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5053088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5053188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5053288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5053388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5053488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5053588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5053688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5053788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5053888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
5053988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400030d
5054088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5054188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5054288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5054388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5054488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5054588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5054688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5054788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5054888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5054988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5055088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5055188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5055288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5055388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5055488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5055588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5055688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5055788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5055888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5055988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5056088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5056188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5056288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5056388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5056488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5056588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5056688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5056788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5056888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5056988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5057088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5057188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5057288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5057388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5057488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5057588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5057688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5057788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5057888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5057988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5058088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5058188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst2(al,
5058288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5058388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5058488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5058588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5058688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5058788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5058888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5058988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5059088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5059188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5059288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000400: {
5059388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400040d
5059488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x20) == 0x20)) {
5059588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5059688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5059788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5059888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5059988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5060088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5060188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5060288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5060388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5060488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_3_Decode((instr >> 4) & 0x3);
5060588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5060688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5060788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5060888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5060988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5061088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5061188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5061288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5061388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5061488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5061588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5061688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x4:
5061788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5061888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5061988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5062088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x5:
5062188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5062288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5062388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5062488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5062588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5062688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5062788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5062888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5062988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5063088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5063188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst3(al,
5063288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5063388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5063488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5063588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5063688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5063788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5063888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5063988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5064088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5064188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5064288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000500: {
5064388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400050d
5064488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0x20) == 0x20)) {
5064588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5064688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5064788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5064888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5064988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5065088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5065188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5065288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5065388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5065488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_3_Decode((instr >> 4) & 0x3);
5065588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5065688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5065788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5065888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5065988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5066088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5066188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5066288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5066388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5066488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5066588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5066688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x4:
5066788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5066888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5066988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5067088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x5:
5067188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5067288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5067388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5067488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5067588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5067688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5067788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5067888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5067988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5068088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5068188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst3(al,
5068288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5068388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5068488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5068588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5068688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5068788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5068888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5068988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5069088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5069188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5069288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000600: {
5069388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400060d
5069488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5069588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5069688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5069788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5069888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5069988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5070088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5070188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5070288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5070388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5070488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5070588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_5_Decode((instr >> 4) & 0x3);
5070688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5070788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5070888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5070988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5071088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5071188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5071288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5071388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5071488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5071588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5071688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5071788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5071888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5071988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5072088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5072188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5072288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5072388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5072488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5072588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5072688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5072788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5072888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5072988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5073088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5073188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5073288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5073388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5073488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
5073588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5073688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5073788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5073888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5073988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5074088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5074188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5074288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5074388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5074488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5074588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000700: {
5074688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400070d
5074788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5074888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5074988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5075088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5075188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5075288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5075388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5075488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5075588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5075688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5075788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5075888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_5_Decode((instr >> 4) & 0x3);
5075988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5076088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5076188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5076288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5076388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5076488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5076588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5076688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5076788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5076888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5076988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5077088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5077188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5077288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5077388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5077488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5077588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5077688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5077788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5077888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5077988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5078088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5078188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5078288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5078388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5078488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5078588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5078688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5078788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
5078888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5078988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5079088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5079188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5079288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5079388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5079488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5079588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5079688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5079788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5079888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000800: {
5079988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400080d
5080088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5080188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5080288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5080388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5080488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5080588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5080688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5080788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5080888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5080988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5081088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5081188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5081288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5081388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5081488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5081588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5081688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5081788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5081888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5081988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5082088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5082188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5082288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5082388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5082488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5082588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5082688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5082788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5082888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5082988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5083088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5083188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5083288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5083388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5083488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5083588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5083688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5083788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5083888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5083988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5084088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5084188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst2(al,
5084288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5084388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5084488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5084588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5084688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5084788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5084888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5084988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5085088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5085188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5085288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000900: {
5085388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf400090d
5085488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5085588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5085688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5085788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5085888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5085988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5086088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5086188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5086288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5086388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5086488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5086588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5086688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5086788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5086888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5086988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5087088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5087188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5087288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5087388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5087488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5087588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5087688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5087788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5087888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5087988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5088088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5088188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5088288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5088388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5088488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5088588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5088688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5088788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5088888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5088988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5089088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5089188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5089288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5089388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5089488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5089588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst2(al,
5089688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5089788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5089888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5089988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5090088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5090188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5090288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5090388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5090488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5090588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5090688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000a00: {
5090788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4000a0d
5090888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5090988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5091088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5091188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5091288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5091388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5091488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5091588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5091688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5091788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5091888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5091988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_5_Decode((instr >> 4) & 0x3);
5092088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5092188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5092288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5092388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5092488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5092588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5092688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5092788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5092888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5092988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5093088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5093188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5093288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5093388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5093488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5093588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5093688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5093788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5093888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5093988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5094088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5094188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5094288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5094388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5094488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5094588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5094688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5094788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5094888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
5094988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5095088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5095188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5095288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5095388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5095488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5095588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5095688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5095788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5095888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
509594339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
5096088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
5096188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5096288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5096388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5096488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5096588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5096688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5096788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5096888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5096988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000f00) {
5097088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5097188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000000
5097288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd)) {
5097388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5097488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5097588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5097688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5097788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5097888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5097988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5098088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5098188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5098288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_4_Decode((instr >> 4) & 0x3);
5098388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5098488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5098588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5098688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5098788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5098888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5098988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5099088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5099188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5099288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5099388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5099488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0:
5099588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5099688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5099788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5099888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x1:
5099988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5100188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5100388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5100488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5100788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51008d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5100988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst4(al,
5101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5101488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5101588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5101888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5102188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
5102288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000100
5102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd)) {
5102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5102588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5102888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5102988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5103088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5103188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5103288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5103388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_4_Decode((instr >> 4) & 0x3);
5103488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5103588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5103688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5103788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5103888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5103988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5104088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5104188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0:
5104688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5104788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x1:
5105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5105388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5105488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5105588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51059d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5106088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst4(al,
5106188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5106488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5106688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5106788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5106888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5106988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5107088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5107188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5107288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
5107388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000200
5107488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5107588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe20) == 0x620) ||
5107688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf30) == 0xa30)) {
5107788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5107888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5107988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5108388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5108488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5108588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_5_Decode((instr >> 4) & 0x3);
5108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5108888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing = kSingle;
5109588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5109688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x7:
5109988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 1;
5110088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5110188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0xa:
5110288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5110388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5110488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x6:
5110588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5110688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5110788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x2:
5110888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5110988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5111088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5111188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last = first + length - 1;
5111288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5111388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5111488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51115d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5111688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst1(al,
5111788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5111888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5111988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5112088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5112188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5112288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5112388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5112488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5112588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5112688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5112788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5112888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000300: {
5112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000300
5113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5113188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe30) == 0x830)) {
5113288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5113388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5113588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5113688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5113788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5113988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5114188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_2_Decode((instr >> 4) & 0x3);
5114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5114588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5114688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5114788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5114988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5115088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5115188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5115288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5115388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x8:
5115488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5115588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5115688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x9:
5115888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5115988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5116088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5116188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x3:
5116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5116588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5116988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5117088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51171d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst2(al,
5117388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5117588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5117988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5118088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5118388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5118488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000400: {
5118588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000400
5118688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5118788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0x20) == 0x20)) {
5118888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5118988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5119088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5119188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5119288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5119388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5119488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5119588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5119688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5119788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_3_Decode((instr >> 4) & 0x3);
5119888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5119988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5120088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5120188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5120288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5120388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5120488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5120588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5120688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5120788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5120888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5120988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x4:
5121088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5121188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5121288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5121388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x5:
5121488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5121588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5121688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5121788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5121888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5121988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5122088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5122188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5122288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51223d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5122488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst3(al,
5122588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5122688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5122788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5122888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5122988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5123088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5123188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5123288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5123388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5123488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5123588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5123688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000500: {
5123788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000500
5123888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5123988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0x20) == 0x20)) {
5124088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5124188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5124288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5124388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5124488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5124588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5124688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5124788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5124888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5124988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_3_Decode((instr >> 4) & 0x3);
5125088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5125188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5125288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5125388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5125488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5125588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5125688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5125788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5125888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5125988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5126088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5126188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x4:
5126288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5126388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5126488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5126588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x5:
5126688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5126788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5126888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5126988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5127088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5127188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5127288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5127388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5127488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51275d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5127688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst3(al,
5127788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5127888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5127988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5128088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5128188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5128288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5128388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5128488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5128588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5128688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5128788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5128888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000600: {
5128988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000600
5129088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5129188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe20) == 0x620) ||
5129288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf30) == 0xa30)) {
5129388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5129488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5129588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5129688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5129788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5129888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5129988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5130088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5130188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5130288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_5_Decode((instr >> 4) & 0x3);
5130388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5130488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5130588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5130688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5130788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5130888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5130988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5131088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing = kSingle;
5131188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5131288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5131388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5131488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x7:
5131588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 1;
5131688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5131788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0xa:
5131888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5131988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5132088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x6:
5132188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5132288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5132388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x2:
5132488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5132588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5132688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5132788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last = first + length - 1;
5132888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5132988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5133088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51331d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5133288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst1(al,
5133388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5133488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5133588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5133688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5133788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5133888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5133988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5134088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5134188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5134288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5134388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5134488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000700: {
5134588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000700
5134688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5134788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe20) == 0x620) ||
5134888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf30) == 0xa30)) {
5134988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5135088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5135188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5135288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5135388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5135488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5135588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5135688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5135788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5135888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_5_Decode((instr >> 4) & 0x3);
5135988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5136088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5136188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5136288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5136388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5136488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5136588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5136688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing = kSingle;
5136788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5136888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5136988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5137088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x7:
5137188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 1;
5137288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5137388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0xa:
5137488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5137588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5137688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x6:
5137788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5137888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5137988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x2:
5138088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5138188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5138288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5138388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last = first + length - 1;
5138488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5138588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5138688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51387d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5138888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst1(al,
5138988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5139088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5139188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5139288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5139388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5139488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5139588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5139688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5139788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5139888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5139988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5140088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000800: {
5140188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000800
5140288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5140388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe30) == 0x830)) {
5140488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5140588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5140688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5140788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5140888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5140988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5141088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5141188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5141288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5141388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_2_Decode((instr >> 4) & 0x3);
5141488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5141588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5141688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5141788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5141888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5141988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5142088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5142188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5142288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5142388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5142488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5142588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x8:
5142688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5142788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5142888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5142988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x9:
5143088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5143188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5143288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5143388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x3:
5143488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5143588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5143688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5143788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5143888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5143988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5144088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5144188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5144288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51443d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5144488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst2(al,
5144588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5144688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5144788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5144888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5144988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5145088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5145188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5145288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5145388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5145488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5145588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5145688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000900: {
5145788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000900
5145888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5145988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe30) == 0x830)) {
5146088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5146188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5146288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5146388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5146488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5146588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5146688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5146788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5146888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5146988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_2_Decode((instr >> 4) & 0x3);
5147088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5147188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5147288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5147388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5147488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5147588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5147688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5147788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5147888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5147988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5148088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5148188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x8:
5148288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5148388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5148488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5148588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x9:
5148688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5148788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5148888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5148988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x3:
5149088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5149188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5149288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5149388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5149488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5149588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5149688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5149788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5149888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51499d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5150088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst2(al,
5150188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5150288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5150388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5150488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5150588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5150688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5150788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5150888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5150988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5151088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5151188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5151288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000a00: {
5151388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4000a00
5151488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5151588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe20) == 0x620) ||
5151688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf30) == 0xa30)) {
5151788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5151888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5151988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5152088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5152188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5152288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5152388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5152488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5152588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5152688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_5_Decode((instr >> 4) & 0x3);
5152788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5152888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5152988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5153088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5153188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5153288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5153388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5153488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing = kSingle;
5153588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5153688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5153788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5153888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x7:
5153988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 1;
5154088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5154188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0xa:
5154288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5154388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5154488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x6:
5154588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5154688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5154788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x2:
5154888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5154988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5155088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5155188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last = first + length - 1;
5155288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5155388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5155488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
51555d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5155688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vst1(al,
5155788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5155888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5155988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5156088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5156188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5156288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5156388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5156488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5156588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5156688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5156788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
515684339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5156988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5157088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5157188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5157288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5157388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5157488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5157588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5157688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5157788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
5157888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf4800000
5157988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000300) {
5158088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5158188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf4800000
5158288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000c00) {
5158388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c00: {
5158488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800c00
5158588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5158688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5158788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5158888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5158988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5159088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5159188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf480000d
5159288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5159388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5159488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf480000d
5159588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5159688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5159788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5159888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5159988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5160088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5160188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5160288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5160388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5160488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5160588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5160688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_1_Decode((instr >> 4) &
5160788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5160888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5160988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5161088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5161188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5161288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5161388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5161488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5161588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5161688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5161788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5161888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 1;
5161988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last = first + length - 1;
5162088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
51621d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5162288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vst1(al,
5162388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5162488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5162588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5162688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5162788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5162888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5162988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5163088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5163188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5163288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5163388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5163488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf480000f
5163588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5163688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5163788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5163888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5163988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5164088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5164188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5164288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5164388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5164488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5164588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5164688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_1_Decode((instr >> 4) &
5164788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5164888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5164988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5165088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5165188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5165288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5165388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5165488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5165588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5165688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5165788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5165888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 1;
5165988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last = first + length - 1;
5166088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
51661d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5166288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vst1(al,
5166388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5166488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5166588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5166688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5166788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5166888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5166988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5167088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5167188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5167288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5167388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5167488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5167588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5167688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5167788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xc00) == 0xc00) ||
5167888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xd) == 0xd)) {
5167988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5168088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5168188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5168288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 10) & 0x3);
5168388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5168488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5168588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5168688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5168788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DecodeNeonAndAlign decode_neon =
5168888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_index_align_1_Decode((instr >> 4) & 0xf,
5168988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
5169088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (!decode_neon.IsValid()) {
5169188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5169288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5169388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5169488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align = decode_neon.GetAlign();
5169588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane = decode_neon.GetLane();
5169688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = decode_neon.GetSpacing();
5169788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5169888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length = 1;
5169988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5170088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5170188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
51702d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5170388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst1(al,
5170488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5170588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5170688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5170788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5170888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  lane),
5170988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5171088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5171188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5171288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5171388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5171488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5171588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5171688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5171788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5171888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5171988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5172088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5172188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000100: {
5172288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf4800100
5172388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000c00) {
5172488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c00: {
5172588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800d00
5172688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5172788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5172888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5172988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5173088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5173188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5173288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf480010d
5173388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5173488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5173588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf480010d
5173688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5173788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5173888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5173988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5174088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5174188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5174288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5174388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5174488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5174588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5174688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5174788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_2_Decode((instr >> 4) &
5174888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5174988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5175088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5175188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5175288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5175388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5175488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5175588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5175688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5175788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5175888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5175988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 2;
5176088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5176188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5176288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5176388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
51764d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5176588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vst2(al,
5176688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5176788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5176888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5176988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5177088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5177188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5177288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5177388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5177488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5177588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5177688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5177788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf480010f
5177888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5177988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5178088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5178188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5178288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5178388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5178488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5178588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5178688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5178788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5178888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5178988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_2_Decode((instr >> 4) &
5179088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5179188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5179288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5179388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5179488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5179588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5179688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5179788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5179888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5179988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5180088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5180188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 2;
5180288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5180388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5180488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5180588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
51806d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5180788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vst2(al,
5180888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5180988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5181088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5181188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5181288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5181388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5181488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5181588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5181688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5181788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5181888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5181988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5182088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5182188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5182288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xc00) == 0xc00) ||
5182388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xd) == 0xd)) {
5182488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5182588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5182688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5182788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 10) & 0x3);
5182888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5182988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5183088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5183188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5183288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DecodeNeonAndAlign decode_neon =
5183388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_index_align_2_Decode((instr >> 4) & 0xf,
5183488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
5183588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (!decode_neon.IsValid()) {
5183688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5183788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5183888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5183988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align = decode_neon.GetAlign();
5184088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane = decode_neon.GetLane();
5184188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = decode_neon.GetSpacing();
5184288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5184388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length = 2;
5184488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5184588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5184688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5184788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5184888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
51849d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5185088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst2(al,
5185188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5185288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5185388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5185488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5185588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  lane),
5185688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5185788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5185888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5185988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5186088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5186188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5186288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5186388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5186488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5186588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5186688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5186788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5186888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000200: {
5186988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf4800200
5187088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000c30) {
5187188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000010: {
5187288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800210
5187388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5187488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5187588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5187688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000030: {
5187788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800230
5187888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5187988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5188088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5188188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000410: {
5188288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800610
5188388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5188488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5188588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5188688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000430: {
5188788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800630
5188888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5188988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5189088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5189188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000810: {
5189288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800a10
5189388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5189488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5189588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5189688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000820: {
5189788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800a20
5189888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5189988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5190088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5190188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000830: {
5190288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800a30
5190388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5190488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5190588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5190688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c00: {
5190788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800e00
5190888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5190988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5191088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5191188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c10: {
5191288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800e10
5191388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5191488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5191588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5191688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c20: {
5191788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800e20
5191888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5191988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5192088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5192188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c30: {
5192288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800e30
5192388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5192488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5192588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5192688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5192788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5192888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5192988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf480020d
5193088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5193188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5193288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf480020d
5193388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00) ||
5193488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x810) == 0x10) ||
5193588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc30) == 0x810) ||
5193688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc30) == 0x820) ||
5193788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc30) == 0x830)) {
5193888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5193988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5194088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5194188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5194288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5194388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5194488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5194588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5194688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5194788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeon decode_neon =
5194888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Index_1_Decode((instr >> 4) & 0xf, dt);
5194988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5195088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5195188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5195288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5195388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5195488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5195588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5195688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5195788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 3;
5195888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5195988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5196088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5196188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
5196288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VST3{<c>}{<q>}.<dt> <list>, [<Rn>]! ; A1
5196388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vst3(al,
5196488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5196588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5196688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5196788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5196888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5196988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     MemOperand(Register(rn), PreIndex));
5197088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5197188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5197288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5197388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf480020f
5197488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00) ||
5197588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0x810) == 0x10) ||
5197688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc30) == 0x810) ||
5197788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc30) == 0x820) ||
5197888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ((instr & 0xc30) == 0x830)) {
5197988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5198088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5198188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5198288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5198388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5198488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5198588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5198688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5198788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5198888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeon decode_neon =
5198988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Index_1_Decode((instr >> 4) & 0xf, dt);
5199088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5199188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5199288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5199388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5199488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5199588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5199688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5199788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5199888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 3;
5199988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5200088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5200188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5200288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
5200388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VST3{<c>}{<q>}.<dt> <list>, [<Rn>] ; A1
5200488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vst3(al,
5200588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5200688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5200788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5200888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5200988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5201088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     MemOperand(Register(rn), Offset));
5201188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5201288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5201388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5201488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5201588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5201688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5201788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xc00) == 0xc00) ||
5201888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xd) == 0xd) ||
5201988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x810) == 0x10) ||
5202088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xc30) == 0x810) ||
5202188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xc30) == 0x820) ||
5202288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xc30) == 0x830)) {
5202388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5202488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5202588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5202688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 10) & 0x3);
5202788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5202888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5202988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5203088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5203188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DecodeNeon decode_neon =
5203288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Index_1_Decode((instr >> 4) & 0xf, dt);
5203388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (!decode_neon.IsValid()) {
5203488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5203588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5203688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5203788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane = decode_neon.GetLane();
5203888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = decode_neon.GetSpacing();
5203988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5204088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length = 3;
5204188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5204288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5204388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5204488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5204588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign(plus);
5204688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5204788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VST3{<c>}{<q>}.<dt> <list>, [<Rn>], #<Rm> ; A1
5204888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst3(al,
5204988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5205088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5205188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5205288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5205388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  lane),
5205488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
5205588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
5205688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Register(rm),
5205788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            PostIndex));
5205888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5205988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5206088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5206188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5206288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5206388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5206488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5206588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5206688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000300: {
5206788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf4800300
5206888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000c00) {
5206988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c00: {
5207088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4800f00
5207188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5207288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5207388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5207488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5207588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5207688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5207788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf480030d
5207888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5207988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5208088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf480030d
5208188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5208288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5208388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5208488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5208588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5208688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5208788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5208888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5208988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5209088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5209188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5209288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_3_Decode((instr >> 4) &
5209388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5209488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5209588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5209688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5209788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5209888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5209988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5210088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5210188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5210288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5210388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5210488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 4;
5210588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5210688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5210788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5210888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
52109d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5211088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vst4(al,
5211188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5211288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5211388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5211488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5211588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5211688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5211788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5211888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5211988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5212088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5212188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5212288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf480030f
5212388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5212488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5212588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5212688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5212788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5212888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5212988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5213088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5213188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5213288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5213388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5213488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_3_Decode((instr >> 4) &
5213588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5213688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5213788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5213888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5213988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5214088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5214188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5214288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5214388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5214488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5214588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5214688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 4;
5214788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5214888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5214988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5215088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
52151d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5215288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vst4(al,
5215388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5215488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5215588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5215688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5215788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5215888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5215988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5216088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5216188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5216288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5216388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5216488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5216588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5216688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5216788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xc00) == 0xc00) ||
5216888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xd) == 0xd)) {
5216988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5217088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5217188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5217288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 10) & 0x3);
5217388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5217488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5217588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5217688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5217788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DecodeNeonAndAlign decode_neon =
5217888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_index_align_3_Decode((instr >> 4) & 0xf,
5217988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
5218088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (!decode_neon.IsValid()) {
5218188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5218288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5218388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5218488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align = decode_neon.GetAlign();
5218588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane = decode_neon.GetLane();
5218688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = decode_neon.GetSpacing();
5218788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5218888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length = 4;
5218988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5219088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5219188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5219288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5219388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
52194d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VST4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5219588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vst4(al,
5219688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5219788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5219888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5219988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5220088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  lane),
5220188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5220288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5220388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5220488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5220588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5220688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5220788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5220888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5220988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5221088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5221188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5221288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5221388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5221488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5221588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5221688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5221788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5221888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5221988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100000: {
5222088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf4100000
5222188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
5222288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
5222388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf4500000
5222488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
5222588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
5222688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf45f0000
5222788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t U = (instr >> 23) & 0x1;
5222888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t imm = instr & 0xfff;
5222988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (U == 0) imm = -imm;
5223088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bool minus_zero = (imm == 0) && (U == 0);
5223188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Label label(imm, kA32PcDelta, minus_zero);
5223288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // PLI{<c>}{<q>} <label> ; A1
5223388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    pli(al, &label);
5223488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff7ff000) != 0xf45ff000)) {
5223588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5223688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5223788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5223888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5223988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5224088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000) == 0xf0000)) {
5224188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5224288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5224388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5224488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5224588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5224688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
5224788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // PLI{<c>}{<q>} [<Rn>{, #{+/-}<imm_3>}] ; A1
5224888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    pli(al, MemOperand(Register(rn), sign, offset, Offset));
5224988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff70f000) != 0xf450f000)) {
5225088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5225188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5225288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5225388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5225488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5225588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5225688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
522574339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
5225888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
5225988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5226088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5226188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5226288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5226388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00200000: {
5226488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf4200000
5226588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800000) {
5226688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
5226788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf4200000
5226888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x0000000d) {
5226988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x0000000d: {
5227088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf420000d
5227188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000002) {
5227288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5227388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf420000d
5227488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000f00) {
5227588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
5227688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420000d
5227788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5227888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5227988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5228088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5228188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5228288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5228388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_4_Decode((instr >> 4) & 0x3);
5228488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5228588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5228688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5228788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5228888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5228988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5229088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5229188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5229288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5229388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5229488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5229588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5229688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5229788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5229888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5229988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5230088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5230188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5230288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5230388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5230488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5230588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5230688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5230788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5230888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52309d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5231088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld4(al,
5231188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5231288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5231388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5231488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5231588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5231688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5231788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5231888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5231988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5232088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5232188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
5232288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420010d
5232388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5232488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5232588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5232688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5232788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5232888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5232988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_4_Decode((instr >> 4) & 0x3);
5233088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5233188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5233288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5233388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5233488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5233588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5233688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5233788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5233888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5233988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5234088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5234188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5234288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5234388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5234488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5234588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5234688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5234788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5234888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5234988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5235088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5235188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5235288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5235388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5235488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52355d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5235688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld4(al,
5235788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5235888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5235988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5236088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5236188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5236288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5236388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5236488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5236588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5236688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5236788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
5236888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420020d
5236988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5237088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5237188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5237288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5237388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5237488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5237588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5237688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5237788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5237888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5237988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5238088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_1_Decode((instr >> 4) & 0x3);
5238188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5238288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5238388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5238488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5238588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5238688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5238788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5238888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5238988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5239088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5239188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5239288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5239388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5239488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5239588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5239688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5239788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5239888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5239988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5240088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5240188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5240288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5240388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5240488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5240588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5240688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5240788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52408d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5240988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5241088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5241188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5241288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5241388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5241488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5241588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5241688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5241788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5241888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5241988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5242088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
5242188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420030d
5242288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5242388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5242488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5242588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5242688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5242788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5242888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5242988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5243088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5243188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5243288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5243388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5243488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5243588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5243688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5243788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5243888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5243988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5244088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5244188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5244288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5244388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5244488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5244588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5244688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5244788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5244888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5244988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5245088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5245188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5245288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5245388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5245488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5245588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5245688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5245788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5245888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5245988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5246088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5246188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52462d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5246388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld2(al,
5246488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5246588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5246688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5246788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5246888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5246988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5247088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5247188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5247288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5247388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5247488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000400: {
5247588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420040d
5247688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5247788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5247888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5247988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5248088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5248188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5248288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_3_Decode((instr >> 4) & 0x3);
5248388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5248488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5248588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5248688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5248788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5248888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5248988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5249088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5249188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5249288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5249388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5249488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x4:
5249588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5249688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5249788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5249888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x5:
5249988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5250088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5250188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5250288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5250388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5250488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5250588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5250688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5250788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52508d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5250988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld3(al,
5251088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5251188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5251288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5251388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5251488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5251588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5251688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5251788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5251888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5251988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5252088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000500: {
5252188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420050d
5252288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5252388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5252488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5252588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5252688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5252788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5252888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_3_Decode((instr >> 4) & 0x3);
5252988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5253088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5253188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5253288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5253388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5253488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5253588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5253688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5253788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5253888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5253988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5254088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x4:
5254188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5254288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5254388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5254488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x5:
5254588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5254688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5254788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5254888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5254988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5255088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5255188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5255288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5255388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52554d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5255588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld3(al,
5255688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5255788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5255888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5255988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5256088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5256188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5256288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5256388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5256488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5256588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5256688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000600: {
5256788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420060d
5256888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5256988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5257088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5257188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5257288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5257388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5257488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5257588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5257688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5257788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5257888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5257988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_1_Decode((instr >> 4) & 0x3);
5258088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5258188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5258288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5258388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5258488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5258588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5258688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5258788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5258888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5258988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5259088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5259188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5259288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5259388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5259488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5259588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5259688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5259788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5259888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5259988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5260088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5260188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5260288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5260388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5260488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5260588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5260688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52607d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5260888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5260988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5261088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5261188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5261288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5261388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5261488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5261588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5261688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5261788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5261888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5261988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000700: {
5262088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420070d
5262188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5262288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5262388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5262488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5262588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5262688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5262788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5262888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5262988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5263088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5263188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5263288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_1_Decode((instr >> 4) & 0x3);
5263388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5263488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5263588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5263688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5263788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5263888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5263988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5264088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5264188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5264288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5264388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5264488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5264588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5264688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5264788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5264888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5264988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5265088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5265188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5265288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5265388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5265488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5265588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5265688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5265788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5265888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5265988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52660d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5266188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5266288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5266388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5266488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5266588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5266688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5266788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5266888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5266988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5267088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5267188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5267288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000800: {
5267388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420080d
5267488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5267588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5267688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5267788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5267888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5267988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5268088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5268188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5268288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5268388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5268488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5268588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5268688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5268788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5268888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5268988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5269088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5269188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5269288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5269388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5269488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5269588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5269688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5269788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5269888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5269988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5270088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5270188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5270288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5270388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5270488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5270588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5270688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5270788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5270888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5270988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5271088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5271188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5271288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5271388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52714d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5271588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld2(al,
5271688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5271788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5271888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5271988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5272088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5272188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5272288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5272388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5272488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5272588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5272688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000900: {
5272788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420090d
5272888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5272988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5273088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5273188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5273288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5273388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5273488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5273588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5273688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5273788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5273888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5273988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5274088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5274188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5274288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5274388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5274488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5274588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5274688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5274788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5274888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5274988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5275088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5275188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5275288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5275388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5275488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5275588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5275688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5275788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5275888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5275988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5276088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5276188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5276288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5276388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5276488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5276588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5276688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5276788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52768d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5276988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld2(al,
5277088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5277188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5277288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5277388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5277488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5277588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5277688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5277788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5277888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5277988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5278088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000a00: {
5278188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4200a0d
5278288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5278388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5278488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5278588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5278688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5278788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5278888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5278988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5279088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5279188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5279288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5279388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_1_Decode((instr >> 4) & 0x3);
5279488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5279588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5279688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5279788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5279888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5279988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5280088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5280188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5280288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5280388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5280488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5280588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5280688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5280788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5280888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5280988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5281088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5281188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5281288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5281388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5281488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5281588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5281688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5281788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5281888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5281988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5282088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
52821d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5282288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5282388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5282488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5282588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5282688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5282788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5282888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5282988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5283088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5283188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5283288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
528334339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
5283488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
5283588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5283688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5283788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5283888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5283988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000002: {
5284088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf420000f
5284188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000f00) {
5284288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
5284388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420000d
5284488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5284588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5284688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5284788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5284888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5284988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5285088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_4_Decode((instr >> 4) & 0x3);
5285188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5285288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5285388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5285488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5285588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5285688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5285788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5285888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5285988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5286088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5286188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5286288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5286388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5286488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5286588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5286688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5286788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5286888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5286988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5287088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5287188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5287288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5287388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5287488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5287588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5287688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5287788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld4(al,
5287888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5287988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5288088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5288188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5288288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5288388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5288488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5288588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5288688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5288788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5288888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
5288988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420010d
5289088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5289188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5289288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5289388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5289488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5289588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5289688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_4_Decode((instr >> 4) & 0x3);
5289788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5289888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5289988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5290088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5290188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5290288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5290388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5290488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5290588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5290688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5290788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5290888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5290988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5291088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5291188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5291288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5291388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5291488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5291588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5291688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5291788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5291888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5291988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5292088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5292188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5292288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5292388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld4(al,
5292488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5292588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5292688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5292788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5292888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5292988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5293088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5293188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5293288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5293388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5293488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
5293588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420020d
5293688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5293788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5293888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5293988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5294088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5294188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5294288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5294388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5294488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5294588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5294688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5294788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_1_Decode((instr >> 4) & 0x3);
5294888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5294988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5295088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5295188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5295288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5295388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5295488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5295588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5295688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5295788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5295888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5295988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5296088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5296188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5296288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5296388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5296488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5296588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5296688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5296788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5296888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5296988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5297088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5297188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5297288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5297388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5297488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5297588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5297688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5297788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5297888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5297988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5298088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5298188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5298288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5298388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5298488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5298588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5298688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5298788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
5298888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420030d
5298988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5299088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5299188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5299288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5299388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5299488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5299588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5299688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5299788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5299888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5299988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5300088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5300188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5300288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5300388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5300488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5300588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5300688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5300788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5300888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5300988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5301088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5301188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5301288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5301388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5301488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5301588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5301688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5301788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5301888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5301988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5302088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5302188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5302288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5302388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5302488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5302588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5302688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5302788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5302888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5302988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5303088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld2(al,
5303188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5303288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5303388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5303488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5303588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5303688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5303788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5303888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5303988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5304088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5304188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000400: {
5304288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420040d
5304388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5304488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5304588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5304688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5304788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5304888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5304988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_3_Decode((instr >> 4) & 0x3);
5305088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5305188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5305288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5305388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5305488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5305588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5305688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5305788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5305888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5305988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5306088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5306188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x4:
5306288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5306388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5306488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5306588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x5:
5306688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5306788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5306888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5306988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5307088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5307188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5307288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5307388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5307488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5307588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5307688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld3(al,
5307788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5307888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5307988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5308088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5308188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5308288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5308388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5308488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5308588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5308688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5308788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000500: {
5308888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420050d
5308988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5309088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5309188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5309288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5309388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5309488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5309588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_3_Decode((instr >> 4) & 0x3);
5309688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5309788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5309888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5309988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5310088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5310188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5310288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5310388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5310488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5310588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5310688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5310788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x4:
5310888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5310988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5311088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5311188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x5:
5311288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5311388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5311488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5311588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5311688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5311788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5311888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5311988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5312088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5312188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5312288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld3(al,
5312388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5312488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5312588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5312688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5312788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5312888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5312988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5313088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5313188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5313288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5313388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000600: {
5313488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420060d
5313588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5313688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5313788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5313888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5313988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5314088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5314188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5314288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5314388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5314488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5314588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5314688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_1_Decode((instr >> 4) & 0x3);
5314788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5314888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5314988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5315088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5315188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5315288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5315388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5315488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5315588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5315688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5315788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5315888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5315988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5316088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5316188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5316288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5316388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5316488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5316588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5316688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5316788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5316888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5316988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5317088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5317188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5317288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5317388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5317488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5317588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5317688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5317788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5317888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5317988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5318088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5318188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5318288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5318388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5318488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5318588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5318688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000700: {
5318788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420070d
5318888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5318988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5319088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5319188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5319288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5319388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5319488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5319588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5319688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5319788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5319888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5319988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_1_Decode((instr >> 4) & 0x3);
5320088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5320188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5320288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5320388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5320488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5320588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5320688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5320788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5320888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5320988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5321088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5321188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5321288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5321388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5321488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5321588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5321688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5321788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5321888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5321988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5322088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5322188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5322288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5322388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5322488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5322588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5322688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5322788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5322888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5322988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5323088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5323188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5323288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5323388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5323488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5323588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5323688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5323788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5323888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5323988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000800: {
5324088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420080d
5324188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5324288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5324388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5324488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5324588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5324688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5324788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5324888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5324988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5325088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5325188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5325288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5325388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5325488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5325588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5325688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5325788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5325888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5325988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5326088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5326188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5326288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5326388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5326488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5326588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5326688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5326788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5326888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5326988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5327088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5327188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5327288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5327388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5327488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5327588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5327688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5327788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5327888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5327988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5328088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5328188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5328288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld2(al,
5328388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5328488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5328588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5328688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5328788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5328888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5328988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5329088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5329188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5329288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5329388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000900: {
5329488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf420090d
5329588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe30) == 0x830)) {
5329688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5329788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5329888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5329988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5330088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5330188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5330288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5330388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5330488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5330588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_2_Decode((instr >> 4) & 0x3);
5330688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5330788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5330888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5330988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5331088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5331188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5331288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5331388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5331488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5331588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5331688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5331788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x8:
5331888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5331988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5332088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5332188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x9:
5332288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5332388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5332488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5332588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x3:
5332688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5332788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5332888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5332988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5333088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5333188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5333288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5333388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5333488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5333588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5333688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld2(al,
5333788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5333888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5333988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5334088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5334188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5334288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5334388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5334488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5334588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5334688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5334788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000a00: {
5334888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4200a0d
5334988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xe20) == 0x620) ||
5335088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf30) == 0xa30)) {
5335188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5335288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5335388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5335488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5335588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5335688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5335788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5335888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5335988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5336088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_align_1_Decode((instr >> 4) & 0x3);
5336188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5336288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5336388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5336488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5336588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5336688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5336788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5336888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5336988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 8) & 0xf) {
5337088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5337188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5337288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x7:
5337388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5337488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5337588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0xa:
5337688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5337788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5337888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x6:
5337988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 3;
5338088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5338188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x2:
5338288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5338388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5338488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5338588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5338688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kMultipleLanes;
5338788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5338888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1
5338988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5339088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5339188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5339288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5339388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5339488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5339588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5339688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5339788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Offset));
5339888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5339988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
534004339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
5340188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
5340288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5340388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5340488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5340588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5340688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5340788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5340888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5340988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5341088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000f00) {
5341188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5341288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200000
5341388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd)) {
5341488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5341588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5341688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5341788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5341888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5341988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5342088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5342188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5342288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5342388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_4_Decode((instr >> 4) & 0x3);
5342488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5342588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5342688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5342788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5342888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5342988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5343088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5343188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5343288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5343388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5343488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5343588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0:
5343688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5343788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5343888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5343988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x1:
5344088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5344188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5344288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5344388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5344488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5344588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5344688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5344788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5344888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53449d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5345088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld4(al,
5345188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5345288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5345388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5345488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5345588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5345688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5345788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5345888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5345988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5346088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5346188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5346288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
5346388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200100
5346488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd)) {
5346588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5346688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5346788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5346888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5346988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5347088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5347188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5347288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5347388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5347488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_4_Decode((instr >> 4) & 0x3);
5347588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5347688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5347788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5347888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5347988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5348088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5348188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5348288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5348388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5348488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5348588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5348688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0:
5348788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5348888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5348988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5349088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x1:
5349188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5349288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5349388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5349488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5349588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5349688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5349788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5349888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5349988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53500d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5350188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld4(al,
5350288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5350388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5350488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5350588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5350688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5350788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5350888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5350988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5351088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5351188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5351288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5351388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
5351488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200200
5351588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5351688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe20) == 0x620) ||
5351788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf30) == 0xa30)) {
5351888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5351988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5352088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5352188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5352288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5352388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5352488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5352588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5352688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5352788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_1_Decode((instr >> 4) & 0x3);
5352888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5352988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5353088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5353188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5353288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5353388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5353488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5353588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing = kSingle;
5353688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5353788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5353888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5353988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x7:
5354088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 1;
5354188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5354288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0xa:
5354388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5354488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5354588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x6:
5354688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5354788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5354888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x2:
5354988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5355088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5355188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5355288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last = first + length - 1;
5355388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5355488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5355588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53556d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5355788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld1(al,
5355888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5355988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5356088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5356188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5356288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5356388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5356488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5356588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5356688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5356788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5356888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5356988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000300: {
5357088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200300
5357188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5357288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe30) == 0x830)) {
5357388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5357488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5357588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5357688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5357788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5357888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5357988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5358088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5358188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5358288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_2_Decode((instr >> 4) & 0x3);
5358388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5358488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5358588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5358688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5358788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5358888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5358988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5359088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5359188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5359288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5359388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5359488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x8:
5359588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5359688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5359788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5359888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x9:
5359988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5360088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5360188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5360288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x3:
5360388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5360488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5360588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5360688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5360788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5360888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5360988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5361088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5361188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53612d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5361388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld2(al,
5361488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5361588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5361688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5361788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5361888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5361988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5362088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5362188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5362288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5362388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5362488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5362588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000400: {
5362688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200400
5362788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd)) {
5362888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5362988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5363088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5363188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5363288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5363388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5363488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5363588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5363688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5363788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_3_Decode((instr >> 4) & 0x3);
5363888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5363988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5364088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5364188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5364288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5364388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5364488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5364588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5364688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5364788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5364888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5364988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x4:
5365088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5365188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5365288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5365388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x5:
5365488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5365588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5365688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5365788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5365888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5365988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5366088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5366188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5366288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53663d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5366488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld3(al,
5366588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5366688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5366788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5366888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5366988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5367088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5367188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5367288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5367388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5367488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5367588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5367688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000500: {
5367788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200500
5367888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd)) {
5367988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5368088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5368188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5368288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5368388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5368488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5368588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5368688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5368788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5368888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_3_Decode((instr >> 4) & 0x3);
5368988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5369088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5369188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5369288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5369388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5369488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5369588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5369688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5369788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5369888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5369988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5370088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x4:
5370188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5370288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5370388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5370488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x5:
5370588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5370688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5370788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5370888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5370988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5371088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5371188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5371288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5371388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53714d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5371588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld3(al,
5371688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5371788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5371888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5371988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5372088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5372188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5372288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5372388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5372488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5372588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5372688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5372788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000600: {
5372888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200600
5372988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5373088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe20) == 0x620) ||
5373188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf30) == 0xa30)) {
5373288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5373388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5373488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5373588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5373688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5373788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5373888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5373988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5374088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5374188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_1_Decode((instr >> 4) & 0x3);
5374288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5374388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5374488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5374588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5374688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5374788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5374888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5374988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing = kSingle;
5375088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5375188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5375288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5375388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x7:
5375488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 1;
5375588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5375688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0xa:
5375788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5375888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5375988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x6:
5376088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5376188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5376288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x2:
5376388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5376488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5376588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5376688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last = first + length - 1;
5376788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5376888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5376988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53770d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5377188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld1(al,
5377288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5377388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5377488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5377588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5377688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5377788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5377888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5377988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5378088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5378188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5378288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5378388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000700: {
5378488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200700
5378588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5378688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe20) == 0x620) ||
5378788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf30) == 0xa30)) {
5378888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5378988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5379088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5379188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5379288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5379388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5379488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5379588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5379688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5379788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_1_Decode((instr >> 4) & 0x3);
5379888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5379988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5380088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5380188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5380288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5380388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5380488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5380588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing = kSingle;
5380688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5380788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5380888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5380988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x7:
5381088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 1;
5381188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5381288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0xa:
5381388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5381488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5381588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x6:
5381688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5381788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5381888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x2:
5381988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5382088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5382188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5382288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last = first + length - 1;
5382388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5382488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5382588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53826d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5382788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld1(al,
5382888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5382988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5383088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5383188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5383288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5383388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5383488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5383588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5383688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5383788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5383888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5383988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000800: {
5384088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200800
5384188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5384288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe30) == 0x830)) {
5384388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5384488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5384588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5384688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5384788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5384888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5384988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5385088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5385188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5385288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_2_Decode((instr >> 4) & 0x3);
5385388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5385488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5385588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5385688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5385788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5385888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5385988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5386088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5386188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5386288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5386388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5386488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x8:
5386588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5386688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5386788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5386888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x9:
5386988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5387088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5387188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5387288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x3:
5387388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5387488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5387588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5387688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5387788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5387888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5387988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5388088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5388188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53882d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5388388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld2(al,
5388488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5388588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5388688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5388788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5388888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5388988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5389088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5389188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5389288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5389388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5389488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5389588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000900: {
5389688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200900
5389788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5389888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe30) == 0x830)) {
5389988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5390088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5390188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5390288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5390388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5390488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5390588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5390688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5390788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5390888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_2_Decode((instr >> 4) & 0x3);
5390988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5391088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5391188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5391288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5391388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5391488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5391588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5391688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing;
5391788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5391888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5391988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5392088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x8:
5392188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5392288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5392388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5392488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x9:
5392588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5392688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kDouble;
5392788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5392888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x3:
5392988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5393088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            spacing = kSingle;
5393188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5393288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5393388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last =
5393488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            first + (length - 1) * (spacing == kSingle ? 1 : 2);
5393588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5393688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5393788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53938d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5393988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld2(al,
5394088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5394188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5394288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5394388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5394488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5394588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5394688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5394788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5394888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5394988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5395088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5395188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000a00: {
5395288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4200a00
5395388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xd) == 0xd) ||
5395488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe20) == 0x620) ||
5395588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf30) == 0xa30)) {
5395688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5395788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5395888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5395988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_size_6_Decode((instr >> 6) & 0x3);
5396088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5396188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5396288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5396388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5396488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Alignment align =
5396588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Align_align_1_Decode((instr >> 4) & 0x3);
5396688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid) ||
5396788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            align.Is(kBadAlignment)) {
5396888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5396988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5397088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5397188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
5397288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned length;
5397388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        SpacingType spacing = kSingle;
5397488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch ((instr >> 8) & 0xf) {
5397588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default:
5397688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            VIXL_UNREACHABLE_OR_FALLTHROUGH();
5397788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x7:
5397888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 1;
5397988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5398088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0xa:
5398188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 2;
5398288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5398388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x6:
5398488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 3;
5398588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5398688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x2:
5398788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            length = 4;
5398888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5398988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5399088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned last = first + length - 1;
5399188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        TransferType transfer = kMultipleLanes;
5399288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5399388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
53994d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5399588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vld1(al,
5399688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             dt,
5399788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             NeonRegisterList(DRegister(first),
5399888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              DRegister(last),
5399988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              spacing,
5400088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              transfer),
5400188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             AlignedMemOperand(Register(rn),
5400288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               align,
5400388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               Register(rm),
5400488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                               PostIndex));
5400588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5400688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
540074339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5400888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5400988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5401088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5401188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5401288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5401388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5401488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5401588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5401688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
5401788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf4a00000
5401888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000300) {
5401988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5402088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf4a00000
5402188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000c00) {
5402288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c00: {
5402388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4a00c00
5402488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5402588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5402688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4a00c0d
5402788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5402888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5402988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a00c0d
5403088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5403188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 6) & 0x3);
5403288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5403388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5403488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5403588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5403688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align =
5403788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_a_1_Decode((instr >> 4) & 0x1, dt);
5403888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid) ||
5403988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    align.Is(kBadAlignment)) {
5404088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5404188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5404288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5404388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5404488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5404588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length;
5404688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = kSingle;
5404788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch ((instr >> 5) & 0x1) {
5404888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
5404988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_UNREACHABLE_OR_FALLTHROUGH();
5405088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
5405188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 1;
5405288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5405388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
5405488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 2;
5405588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5405688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5405788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last = first + length - 1;
5405888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                TransferType transfer = kAllLanes;
5405988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54060d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5406188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld1(al,
5406288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5406388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5406488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5406588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5406688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      transfer),
5406788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5406888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5406988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5407088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5407188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5407288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5407388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a00c0f
5407488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5407588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 6) & 0x3);
5407688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5407788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5407888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5407988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5408088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align =
5408188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_a_1_Decode((instr >> 4) & 0x1, dt);
5408288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid) ||
5408388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    align.Is(kBadAlignment)) {
5408488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5408588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5408688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5408788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5408888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5408988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length;
5409088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = kSingle;
5409188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch ((instr >> 5) & 0x1) {
5409288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
5409388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_UNREACHABLE_OR_FALLTHROUGH();
5409488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
5409588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 1;
5409688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5409788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
5409888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 2;
5409988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5410088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5410188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last = first + length - 1;
5410288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                TransferType transfer = kAllLanes;
5410388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54104d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5410588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld1(al,
5410688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5410788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5410888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5410988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5411088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      transfer),
5411188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5411288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5411388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5411488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5411588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5411688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5411788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5411888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5411988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5412088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xd) == 0xd)) {
5412188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5412288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5412388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5412488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5412588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5412688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5412788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5412888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5412988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5413088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_a_1_Decode((instr >> 4) & 0x1, dt);
5413188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5413288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5413388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5413488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5413588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5413688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5413788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5413888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = kSingle;
5413988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 5) & 0x1) {
5414088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5414188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5414288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5414388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 1;
5414488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5414588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5414688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5414788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5414888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5414988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5415088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kAllLanes;
5415188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5415288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
54153d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5415488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5415588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5415688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5415788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5415888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5415988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5416088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5416188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5416288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5416388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5416488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5416588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5416688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5416788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5416888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5416988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5417088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5417188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5417288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4a0000d
5417388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5417488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5417588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a0000d
5417688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5417788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5417888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5417988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5418088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5418188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5418288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5418388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5418488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5418588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5418688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5418788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_1_Decode((instr >> 4) &
5418888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5418988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5419088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5419188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5419288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5419388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5419488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5419588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5419688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5419788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5419888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5419988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 1;
5420088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last = first + length - 1;
5420188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54202d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5420388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld1(al,
5420488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5420588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5420688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5420788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5420888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5420988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5421088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5421188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5421288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5421388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5421488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5421588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a0000f
5421688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5421788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5421888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5421988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5422088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5422188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5422288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5422388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5422488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5422588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5422688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5422788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_1_Decode((instr >> 4) &
5422888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5422988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5423088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5423188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5423288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5423388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5423488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5423588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5423688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5423788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5423888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5423988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 1;
5424088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last = first + length - 1;
5424188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54242d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5424388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld1(al,
5424488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5424588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5424688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5424788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5424888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5424988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5425088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5425188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5425288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5425388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5425488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5425588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5425688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5425788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5425888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xc00) == 0xc00) ||
5425988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xd) == 0xd)) {
5426088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5426188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5426288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5426388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 10) & 0x3);
5426488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5426588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5426688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5426788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5426888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DecodeNeonAndAlign decode_neon =
5426988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_index_align_1_Decode((instr >> 4) & 0xf,
5427088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
5427188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (!decode_neon.IsValid()) {
5427288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5427388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5427488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5427588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align = decode_neon.GetAlign();
5427688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane = decode_neon.GetLane();
5427788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = decode_neon.GetSpacing();
5427888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5427988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length = 1;
5428088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last = first + length - 1;
5428188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5428288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
54283d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD1{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5428488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld1(al,
5428588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5428688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5428788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5428888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5428988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  lane),
5429088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5429188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5429288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5429388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5429488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5429588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5429688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5429788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5429888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5429988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5430088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5430188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5430288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000100: {
5430388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf4a00100
5430488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000c00) {
5430588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c00: {
5430688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4a00d00
5430788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5430888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5430988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4a00d0d
5431088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5431188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5431288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a00d0d
5431388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5431488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 6) & 0x3);
5431588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5431688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5431788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5431888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5431988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align =
5432088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_a_2_Decode((instr >> 4) & 0x1, dt);
5432188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid) ||
5432288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    align.Is(kBadAlignment)) {
5432388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5432488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5432588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5432688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5432788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5432888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length;
5432988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing;
5433088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch ((instr >> 5) & 0x1) {
5433188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
5433288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_UNREACHABLE_OR_FALLTHROUGH();
5433388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
5433488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 2;
5433588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kSingle;
5433688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5433788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
5433888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 2;
5433988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kDouble;
5434088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5434188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5434288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5434388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5434488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5434588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                TransferType transfer = kAllLanes;
5434688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54347d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5434888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld2(al,
5434988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5435088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5435188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5435288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5435388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      transfer),
5435488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5435588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5435688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5435788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5435888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5435988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5436088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a00d0f
5436188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5436288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 6) & 0x3);
5436388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5436488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5436588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5436688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5436788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align =
5436888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_a_2_Decode((instr >> 4) & 0x1, dt);
5436988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid) ||
5437088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    align.Is(kBadAlignment)) {
5437188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5437288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5437388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5437488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5437588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5437688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length;
5437788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing;
5437888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch ((instr >> 5) & 0x1) {
5437988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
5438088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_UNREACHABLE_OR_FALLTHROUGH();
5438188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
5438288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 2;
5438388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kSingle;
5438488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5438588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
5438688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 2;
5438788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kDouble;
5438888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5438988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5439088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5439188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5439288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5439388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                TransferType transfer = kAllLanes;
5439488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54395d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5439688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld2(al,
5439788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5439888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5439988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5440088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5440188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      transfer),
5440288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5440388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5440488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5440588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5440688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5440788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5440888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5440988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5441088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5441188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xd) == 0xd)) {
5441288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5441388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5441488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5441588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 6) & 0x3);
5441688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5441788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5441888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5441988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5442088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5442188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_a_2_Decode((instr >> 4) & 0x1, dt);
5442288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5442388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5442488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5442588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5442688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5442788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5442888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5442988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5443088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 5) & 0x1) {
5443188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5443288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5443388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5443488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5443588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5443688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5443788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5443888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 2;
5443988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5444088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5444188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5444288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5444388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5444488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5444588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kAllLanes;
5444688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5444788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
54448d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5444988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld2(al,
5445088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5445188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5445288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5445388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5445488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5445588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5445688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5445788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5445888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5445988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5446088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5446188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5446288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5446388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5446488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5446588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5446688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5446788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4a0010d
5446888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5446988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5447088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a0010d
5447188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5447288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5447388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5447488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5447588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5447688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5447788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5447888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5447988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5448088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5448188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5448288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_2_Decode((instr >> 4) &
5448388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5448488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5448588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5448688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5448788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5448888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5448988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5449088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5449188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5449288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5449388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5449488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 2;
5449588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5449688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5449788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5449888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54499d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5450088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld2(al,
5450188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5450288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5450388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5450488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5450588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5450688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5450788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5450888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5450988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5451088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5451188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5451288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a0010f
5451388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5451488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5451588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5451688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5451788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5451888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5451988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5452088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5452188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5452288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5452388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5452488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_2_Decode((instr >> 4) &
5452588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5452688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5452788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5452888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5452988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5453088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5453188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5453288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5453388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5453488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5453588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5453688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 2;
5453788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5453888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5453988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5454088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54541d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5454288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld2(al,
5454388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5454488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5454588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5454688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5454788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5454888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5454988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5455088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5455188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5455288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5455388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5455488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5455588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5455688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5455788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xc00) == 0xc00) ||
5455888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xd) == 0xd)) {
5455988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5456088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5456188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5456288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 10) & 0x3);
5456388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5456488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5456588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5456688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5456788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DecodeNeonAndAlign decode_neon =
5456888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_index_align_2_Decode((instr >> 4) & 0xf,
5456988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
5457088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (!decode_neon.IsValid()) {
5457188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5457288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5457388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5457488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align = decode_neon.GetAlign();
5457588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane = decode_neon.GetLane();
5457688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = decode_neon.GetSpacing();
5457788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5457888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length = 2;
5457988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5458088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5458188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5458288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5458388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
54584d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD2{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5458588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld2(al,
5458688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5458788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5458888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5458988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5459088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  lane),
5459188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5459288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5459388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5459488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5459588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5459688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5459788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5459888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5459988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5460088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5460188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5460288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5460388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000200: {
5460488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf4a00200
5460588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000c00) {
5460688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c00: {
5460788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4a00e00
5460888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000010) {
5460988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
5461088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4a00e00
5461188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x0000000d) {
5461288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0000000d: {
5461388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a00e0d
5461488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (instr & 0x00000002) {
5461588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000000: {
5461688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf4a00e0d
5461788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
5461888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_7_Decode((instr >> 6) & 0x3);
5461988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
5462088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
5462188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
5462288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
5462388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned first =
5462488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
5462588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned length;
5462688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SpacingType spacing;
5462788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    switch ((instr >> 5) & 0x1) {
5462888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      default:
5462988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        VIXL_UNREACHABLE_OR_FALLTHROUGH();
5463088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x0:
5463188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        length = 3;
5463288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        spacing = kSingle;
5463388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
5463488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x1:
5463588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        length = 3;
5463688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        spacing = kDouble;
5463788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
5463888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
5463988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned last =
5464088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        first +
5464188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        (length - 1) *
5464288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (spacing == kSingle ? 1 : 2);
5464388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    TransferType transfer = kAllLanes;
5464488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rn = (instr >> 16) & 0xf;
5464588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>]! ; A1
5464688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vld3(al,
5464788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
5464888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         NeonRegisterList(DRegister(first),
5464988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          DRegister(last),
5465088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          spacing,
5465188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          transfer),
5465288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), PreIndex));
5465388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5465488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
5465588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x00000002: {
5465688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // 0xf4a00e0f
5465788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    DataType dt =
5465888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        Dt_size_7_Decode((instr >> 6) & 0x3);
5465988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (dt.Is(kDataTypeValueInvalid)) {
5466088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnallocatedA32(instr);
5466188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      return;
5466288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
5466388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned first =
5466488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        ExtractDRegister(instr, 22, 12);
5466588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned length;
5466688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    SpacingType spacing;
5466788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    switch ((instr >> 5) & 0x1) {
5466888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      default:
5466988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        VIXL_UNREACHABLE_OR_FALLTHROUGH();
5467088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x0:
5467188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        length = 3;
5467288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        spacing = kSingle;
5467388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
5467488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      case 0x1:
5467588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        length = 3;
5467688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        spacing = kDouble;
5467788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        break;
5467888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
5467988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned last =
5468088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        first +
5468188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        (length - 1) *
5468288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            (spacing == kSingle ? 1 : 2);
5468388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    TransferType transfer = kAllLanes;
5468488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    unsigned rn = (instr >> 16) & 0xf;
5468588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>] ; A1
5468688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vld3(al,
5468788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         dt,
5468888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         NeonRegisterList(DRegister(first),
5468988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          DRegister(last),
5469088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          spacing,
5469188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          transfer),
5469288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         MemOperand(Register(rn), Offset));
5469388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5469488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
5469588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5469688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5469788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5469888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default: {
5469988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xd) == 0xd)) {
5470088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5470188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5470288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5470388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5470488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 6) & 0x3);
5470588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5470688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5470788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5470888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5470988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5471088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5471188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length;
5471288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing;
5471388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch ((instr >> 5) & 0x1) {
5471488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
5471588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_UNREACHABLE_OR_FALLTHROUGH();
5471688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
5471788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 3;
5471888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kSingle;
5471988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5472088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
5472188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 3;
5472288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kDouble;
5472388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5472488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5472588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5472688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5472788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5472888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                TransferType transfer = kAllLanes;
5472988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
5473088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Sign sign(plus);
5473188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = instr & 0xf;
54732d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>], #<Rm> ; A1 NOLINT(whitespace/line_length)
5473388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld3(al,
5473488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5473588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5473688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5473788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5473888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      transfer),
5473988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     MemOperand(Register(rn),
5474088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                sign,
5474188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                Register(rm),
5474288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                PostIndex));
5474388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5474488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5474588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5474688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5474788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
547484339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
5474988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
5475088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5475188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5475288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5475388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5475488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5475588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5475688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5475788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4a0020d
5475888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5475988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5476088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a0020d
5476188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5476288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5476388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5476488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5476588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5476688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5476788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5476888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5476988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5477088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5477188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeon decode_neon =
5477288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Index_1_Decode((instr >> 4) & 0xf, dt);
5477388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5477488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5477588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5477688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5477788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5477888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5477988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5478088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5478188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 3;
5478288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5478388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5478488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5478588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
5478688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>]! ; A1
5478788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld3(al,
5478888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5478988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5479088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5479188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5479288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5479388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     MemOperand(Register(rn), PreIndex));
5479488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5479588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5479688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5479788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a0020f
5479888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5479988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5480088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5480188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5480288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5480388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5480488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5480588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5480688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5480788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5480888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeon decode_neon =
5480988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Index_1_Decode((instr >> 4) & 0xf, dt);
5481088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5481188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5481288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5481388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5481488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5481588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5481688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5481788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5481888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 3;
5481988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5482088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5482188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5482288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
5482388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>] ; A1
5482488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld3(al,
5482588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5482688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5482788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5482888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5482988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5483088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     MemOperand(Register(rn), Offset));
5483188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5483288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5483388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5483488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5483588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5483688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5483788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xc00) == 0xc00) ||
5483888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xd) == 0xd)) {
5483988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5484088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5484188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5484288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 10) & 0x3);
5484388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5484488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5484588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5484688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5484788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DecodeNeon decode_neon =
5484888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Index_1_Decode((instr >> 4) & 0xf, dt);
5484988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (!decode_neon.IsValid()) {
5485088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5485188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5485288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5485388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane = decode_neon.GetLane();
5485488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = decode_neon.GetSpacing();
5485588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5485688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length = 3;
5485788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5485888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5485988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5486088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5486188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign(plus);
5486288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5486388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLD3{<c>}{<q>}.<dt> <list>, [<Rn>], #<Rm> ; A1
5486488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld3(al,
5486588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5486688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5486788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5486888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5486988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  lane),
5487088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
5487188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
5487288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Register(rm),
5487388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            PostIndex));
5487488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5487588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5487688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5487788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5487888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5487988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5488088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5488188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5488288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000300: {
5488388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf4a00300
5488488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000c00) {
5488588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000c00: {
5488688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xf4a00f00
5488788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5488888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5488988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4a00f0d
5489088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5489188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5489288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a00f0d
5489388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5489488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_8_Decode((instr >> 6) & 0x3);
5489588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5489688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5489788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5489888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5489988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align =
5490088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_a_3_Decode((instr >> 4) & 0x1,
5490188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     dt,
5490288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 6) & 0x3);
5490388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid) ||
5490488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    align.Is(kBadAlignment)) {
5490588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5490688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5490788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5490888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5490988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5491088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length;
5491188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing;
5491288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch ((instr >> 5) & 0x1) {
5491388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
5491488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_UNREACHABLE_OR_FALLTHROUGH();
5491588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
5491688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 4;
5491788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kSingle;
5491888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5491988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
5492088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 4;
5492188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kDouble;
5492288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5492388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5492488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5492588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5492688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5492788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                TransferType transfer = kAllLanes;
5492888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54929d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5493088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld4(al,
5493188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5493288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5493388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5493488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5493588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      transfer),
5493688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5493788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5493888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5493988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5494088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5494188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5494288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a00f0f
5494388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5494488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_8_Decode((instr >> 6) & 0x3);
5494588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5494688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5494788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5494888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5494988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align =
5495088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_a_3_Decode((instr >> 4) & 0x1,
5495188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     dt,
5495288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                     (instr >> 6) & 0x3);
5495388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid) ||
5495488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    align.Is(kBadAlignment)) {
5495588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5495688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5495788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5495888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5495988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5496088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length;
5496188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing;
5496288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch ((instr >> 5) & 0x1) {
5496388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
5496488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    VIXL_UNREACHABLE_OR_FALLTHROUGH();
5496588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
5496688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 4;
5496788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kSingle;
5496888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5496988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
5497088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    length = 4;
5497188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    spacing = kDouble;
5497288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
5497388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5497488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5497588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5497688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5497788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                TransferType transfer = kAllLanes;
5497888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
54979d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5498088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld4(al,
5498188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5498288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5498388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5498488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5498588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      transfer),
5498688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5498788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5498888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5498988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5499088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5499188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5499288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5499388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5499488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5499588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xd) == 0xd)) {
5499688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5499788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5499888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5499988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_8_Decode((instr >> 6) & 0x3);
5500088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5500188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5500288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5500388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5500488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align =
5500588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_a_3_Decode((instr >> 4) & 0x1,
5500688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 dt,
5500788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                 (instr >> 6) & 0x3);
5500888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid) ||
5500988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                align.Is(kBadAlignment)) {
5501088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5501188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5501288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5501388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5501488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length;
5501588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing;
5501688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch ((instr >> 5) & 0x1) {
5501788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              default:
5501888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                VIXL_UNREACHABLE_OR_FALLTHROUGH();
5501988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x0:
5502088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5502188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kSingle;
5502288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5502388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x1:
5502488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                length = 4;
5502588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                spacing = kDouble;
5502688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5502788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5502888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5502988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5503088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5503188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            TransferType transfer = kAllLanes;
5503288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5503388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
55034d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5503588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld4(al,
5503688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5503788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5503888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5503988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5504088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  transfer),
5504188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5504288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5504388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5504488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5504588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5504688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5504788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5504888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5504988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5505088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5505188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x0000000d) {
5505288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x0000000d: {
5505388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0xf4a0030d
5505488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00000002) {
5505588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
5505688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a0030d
5505788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5505888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5505988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5506088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5506188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5506288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5506388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5506488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5506588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5506688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5506788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5506888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_3_Decode((instr >> 4) &
5506988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5507088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5507188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5507288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5507388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5507488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5507588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5507688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5507788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5507888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5507988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5508088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 4;
5508188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5508288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5508388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5508488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
55085d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}]! ; A1 NOLINT(whitespace/line_length)
5508688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld4(al,
5508788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5508888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5508988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5509088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5509188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5509288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5509388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5509488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       PostIndex));
5509588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5509688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5509788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000002: {
5509888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0xf4a0030f
5509988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xc00) == 0xc00)) {
5510088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5510188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5510288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5510388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
5510488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_size_7_Decode((instr >> 10) & 0x3);
5510588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
5510688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5510788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5510888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5510988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DecodeNeonAndAlign decode_neon =
5511088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Align_index_align_3_Decode((instr >> 4) &
5511188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   0xf,
5511288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                               dt);
5511388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (!decode_neon.IsValid()) {
5511488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
5511588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
5511688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
5511788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Alignment align = decode_neon.GetAlign();
5511888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                int lane = decode_neon.GetLane();
5511988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                SpacingType spacing = decode_neon.GetSpacing();
5512088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned first =
5512188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    ExtractDRegister(instr, 22, 12);
5512288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned length = 4;
5512388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned last =
5512488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    first +
5512588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    (length - 1) * (spacing == kSingle ? 1 : 2);
5512688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = (instr >> 16) & 0xf;
55127d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                                // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}] ; A1 NOLINT(whitespace/line_length)
5512888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vld4(al,
5512988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
5513088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     NeonRegisterList(DRegister(first),
5513188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      DRegister(last),
5513288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      spacing,
5513388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      lane),
5513488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     AlignedMemOperand(Register(rn),
5513588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       align,
5513688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       Offset));
5513788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
5513888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
5513988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5514088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5514188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5514288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5514388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xc00) == 0xc00) ||
5514488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xd) == 0xd)) {
5514588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5514688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5514788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5514888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_size_7_Decode((instr >> 10) & 0x3);
5514988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
5515088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5515188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5515288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5515388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DecodeNeonAndAlign decode_neon =
5515488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Align_index_align_3_Decode((instr >> 4) & 0xf,
5515588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                           dt);
5515688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (!decode_neon.IsValid()) {
5515788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5515888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5515988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5516088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Alignment align = decode_neon.GetAlign();
5516188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int lane = decode_neon.GetLane();
5516288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            SpacingType spacing = decode_neon.GetSpacing();
5516388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
5516488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned length = 4;
5516588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned last =
5516688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                first +
5516788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (length - 1) * (spacing == kSingle ? 1 : 2);
5516888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5516988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
55170d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLD4{<c>}{<q>}.<dt> <list>, [<Rn>{:<align>}], <Rm> ; A1 NOLINT(whitespace/line_length)
5517188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vld4(al,
5517288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
5517388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 NeonRegisterList(DRegister(first),
5517488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  DRegister(last),
5517588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  spacing,
5517688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                  lane),
5517788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 AlignedMemOperand(Register(rn),
5517888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   align,
5517988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   Register(rm),
5518088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                   PostIndex));
5518188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5518288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5518388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5518488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5518588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5518688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5518788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5518888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5518988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5519088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5519188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5519288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5519388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5519488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5519588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01100000: {
5519688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf5100000
5519788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x000f0000) {
5519888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x000f0000: {
5519988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf51f0000
5520088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t U = (instr >> 23) & 0x1;
5520188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                int32_t imm = instr & 0xfff;
5520288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (U == 0) imm = -imm;
5520388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                bool minus_zero = (imm == 0) && (U == 0);
5520488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Label label(imm, kA32PcDelta, minus_zero);
5520588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PLD{<c>}{<q>} <label> ; A1
5520688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pld(al, &label);
5520788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff7ff000) != 0xf55ff000)) {
5520888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5520988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5521088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5521188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5521288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
5521388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00400000) {
5521488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5521588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf5100000
5521688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000) == 0xf0000)) {
5521788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5521888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5521988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5522088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5522188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5522288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
5522388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // PLDW{<c>}{<q>} [<Rn>{, #{+/-}<imm_2>}] ; A1
5522488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    pldw(al, MemOperand(Register(rn), sign, offset, Offset));
5522588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff70f000) != 0xf510f000)) {
5522688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5522788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5522888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5522988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5523088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00400000: {
5523188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xf5500000
5523288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000) == 0xf0000)) {
5523388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5523488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5523588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5523688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5523788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5523888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
5523988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // PLD{<c>}{<q>} [<Rn>{, #{+/-}<imm_2>}] ; A1
5524088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    pld(al, MemOperand(Register(rn), sign, offset, Offset));
5524188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff70f000) != 0xf550f000)) {
5524288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5524388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5524488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5524588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5524688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5524788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5524888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5524988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5525088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5525188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5525288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01300000: {
5525388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf5300000
5525488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00c000f0) {
5525588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400010: {
5525688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf5700010
5525788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // CLREX{<c>}{<q>} ; A1
5525888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                clrex(al);
5525988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xffffffff) != 0xf57ff01f)) {
5526088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5526188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5526288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5526388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5526488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400040: {
5526588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf5700040
5526688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                MemoryBarrier option(instr & 0xf);
5526788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // DSB{<c>}{<q>} {<option>} ; A1
5526888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                dsb(al, option);
5526988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfffffff0) != 0xf57ff040)) {
5527088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5527188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5527288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5527388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5527488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400050: {
5527588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf5700050
5527688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                MemoryBarrier option(instr & 0xf);
5527788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // DMB{<c>}{<q>} {<option>} ; A1
5527888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                dmb(al, option);
5527988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfffffff0) != 0xf57ff050)) {
5528088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5528188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5528288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5528388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5528488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400060: {
5528588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf5700060
5528688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                MemoryBarrier option(instr & 0xf);
5528788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ISB{<c>}{<q>} {<option>} ; A1
5528888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                isb(al, option);
5528988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfffffff0) != 0xf57ff060)) {
5529088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5529188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5529288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5529388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
552944339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
5529588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
5529688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5529788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5529888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5529988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
553004339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard          default:
5530188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnallocatedA32(instr);
5530288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5530388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
5530488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
5530588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
5530688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x06000000: {
5530788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0xf6000000
5530888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01700010) {
5530988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00500000: {
5531088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf6500000
5531188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000fe0) {
5531288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000060: {
5531388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf6500060
5531488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
5531588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5531688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
5531788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = RRX;
5531888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = 0;
5531988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
5532088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PLI{<c>}{<q>} [<Rn>, {+/-}<Rm>, RRX] ; A1
5532188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pli(al,
5532288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
5532388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
5532488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5532588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
5532688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
5532788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               addrmode));
5532888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff70fff0) != 0xf650f060)) {
5532988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5533088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5533188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5533288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5533388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
5533488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfe0) == 0x60)) {
5533588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5533688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
5533788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5533888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
5533988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5534088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
5534188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5534288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr >> 7) & 0x1f);
5534388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
5534488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
5534588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
5534688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PLI{<c>}{<q>} [<Rn>, {+/-}<Rm>{, <shift> #<amount_1>}] ; A1
5534788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pli(al,
5534888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
5534988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
5535088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5535188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
5535288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
5535388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               addrmode));
5535488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff70f010) != 0xf650f000)) {
5535588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5535688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5535788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5535888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5535988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5536088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5536188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5536288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01100000: {
5536388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf7100000
5536488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000fe0) {
5536588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000060: {
5536688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf7100060
5536788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
5536888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5536988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
5537088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = RRX;
5537188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = 0;
5537288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
5537388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PLDW{<c>}{<q>} [<Rn>, {+/-}<Rm>, RRX] ; A1
5537488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pldw(al,
5537588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn),
5537688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign,
5537788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
5537888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift,
5537988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                amount,
5538088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                addrmode));
5538188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff70fff0) != 0xf710f060)) {
5538288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5538388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5538488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5538588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5538688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
5538788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfe0) == 0x60)) {
5538888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5538988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
5539088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5539188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
5539288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5539388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
5539488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5539588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr >> 7) & 0x1f);
5539688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
5539788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
5539888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
5539988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PLDW{<c>}{<q>} [<Rn>, {+/-}<Rm>{, <shift> #<amount_1>}] ; A1
5540088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pldw(al,
5540188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn),
5540288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign,
5540388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
5540488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift,
5540588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                amount,
5540688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                addrmode));
5540788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff70f010) != 0xf710f000)) {
5540888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5540988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5541088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5541188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5541288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5541388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5541488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5541588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01500000: {
5541688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf7500000
5541788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000fe0) {
5541888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000060: {
5541988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xf7500060
5542088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
5542188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5542288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
5542388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = RRX;
5542488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = 0;
5542588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
5542688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PLD{<c>}{<q>} [<Rn>, {+/-}<Rm>, RRX] ; A1
5542788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pld(al,
5542888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
5542988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
5543088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5543188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
5543288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
5543388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               addrmode));
5543488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff70fff0) != 0xf750f060)) {
5543588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5543688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5543788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5543888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5543988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
5544088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfe0) == 0x60)) {
5544188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5544288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
5544388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5544488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
5544588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5544688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
5544788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5544888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (instr >> 7) & 0x1f);
5544988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
5545088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
5545188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
5545288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PLD{<c>}{<q>} [<Rn>, {+/-}<Rm>{, <shift> #<amount_1>}] ; A1
5545388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pld(al,
5545488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
5545588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
5545688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5545788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
5545888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
5545988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               addrmode));
5546088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff70f010) != 0xf750f000)) {
5546188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
5546288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5546388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5546488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5546588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5546688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5546788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
554684339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard          default:
5546988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnallocatedA32(instr);
5547088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5547188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
5547288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
5547388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
5547488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x08000000: {
5547588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0xf8000000
5547688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01d00000) {
5547788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100000: {
5547888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf8100000
5547988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("RFEDA", instr);
5548088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5548188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5548288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00400000: {
5548388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf8400000
5548488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("SRSDA", instr);
5548588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5548688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5548788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00900000: {
5548888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf8900000
5548988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("RFE{IA}", instr);
5549088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5549188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5549288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00c00000: {
5549388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf8c00000
5549488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("SRS{IA}", instr);
5549588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5549688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5549788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01100000: {
5549888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf9100000
5549988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("RFEDB", instr);
5550088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5550188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5550288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01400000: {
5550388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf9400000
5550488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("SRSDB", instr);
5550588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5550688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5550788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01900000: {
5550888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf9900000
5550988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("RFEIB", instr);
5551088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5551188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5551288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01c00000: {
5551388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xf9c00000
5551488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("SRSIB", instr);
5551588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5551688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
555174339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard          default:
5551888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnallocatedA32(instr);
5551988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5552088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
5552188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
5552288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
5552388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0a000000: {
5552488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0xfa000000
5552588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        int32_t imm = SignExtend<int32_t>(((instr >> 24) & 0x1) |
5552688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                              ((instr << 1) & 0x1fffffe),
5552788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                          25)
5552888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      << 1;
5552988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        Label label(imm, kA32PcDelta);
5553088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // BLX{<c>}{<q>} <label> ; A2
5553188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        blx(al, &label);
5553288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
5553388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
5553488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0c000000: {
5553588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0xfc000000
5553688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01300000) {
5553788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
5553888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfc000000
5553988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800000) {
5554088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
5554188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xfc000000
5554288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x00400000) == 0x00400000) {
5554388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xe00) == 0xa00)) {
5554488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
5554588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
5554688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5554788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnimplementedA32("MCRR2", instr);
5554888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
5554988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5555088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5555188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5555288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5555388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
5555488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xfc800000
5555588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xe00) == 0xa00)) {
5555688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5555788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
5555888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5555988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("STC2", instr);
5556088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5556188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5556288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5556388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5556488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5556588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100000: {
5556688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfc100000
5556788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800000) {
5556888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
5556988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xfc100000
5557088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x00400000) == 0x00400000) {
5557188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xe00) == 0xa00)) {
5557288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
5557388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
5557488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5557588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnimplementedA32("MRRC2", instr);
5557688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
5557788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5557888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5557988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5558088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5558188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
5558288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xfc900000
5558388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000e00) {
5558488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000a00: {
5558588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfc900a00
5558688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
5558788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5558888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5558988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5559088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
5559188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
5559288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfc9f0000
5559388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xe00) == 0xa00)) {
5559488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5559588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5559688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5559788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("LDC2", instr);
5559888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5559988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5560088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5560188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000) == 0xf0000) ||
5560288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe00) == 0xa00)) {
5560388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5560488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5560588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5560688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("LDC2", instr);
5560788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5560888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5560988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5561088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5561188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5561288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5561388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5561488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5561588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5561688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5561788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5561888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00200000: {
5561988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfc200000
5562088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xe00) == 0xa00)) {
5562188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
5562288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
5562388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5562488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("STC2", instr);
5562588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5562688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5562788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00300000: {
5562888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfc300000
5562988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xf0000) == 0xf0000) || ((instr & 0xe00) == 0xa00)) {
5563088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
5563188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
5563288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5563388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("LDC2", instr);
5563488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5563588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5563688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01000000: {
5563788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfd000000
5563888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xe00) == 0xa00)) {
5563988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
5564088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
5564188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5564288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("STC2", instr);
5564388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5564488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5564588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01100000: {
5564688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfd100000
5564788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000e00) {
5564888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000a00: {
5564988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xfd100a00
5565088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
5565188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5565288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5565388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
5565488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
5565588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
5565688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfd1f0000
5565788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xe00) == 0xa00)) {
5565888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5565988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5566088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5566188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("LDC2", instr);
5566288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5566388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5566488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5566588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000) == 0xf0000) ||
5566688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xe00) == 0xa00)) {
5566788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5566888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5566988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5567088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("LDC2", instr);
5567188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5567288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5567388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5567488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5567588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5567688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5567788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5567888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5567988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01200000: {
5568088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfd200000
5568188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xe00) == 0xa00)) {
5568288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
5568388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
5568488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5568588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("STC2", instr);
5568688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5568788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5568888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01300000: {
5568988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfd300000
5569088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xf0000) == 0xf0000) || ((instr & 0xe00) == 0xa00)) {
5569188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
5569288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
5569388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5569488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("LDC2", instr);
5569588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5569688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5569788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
5569888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
5569988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
5570088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0e000000: {
5570188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0xfe000000
5570288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01000010) {
5570388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
5570488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfe000000
5570588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000e00) {
5570688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000a00: {
5570788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xfe000a00
5570888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00b00140) {
5570988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5571088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe000a00
5571188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractSRegister(instr, 22, 12);
5571288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractSRegister(instr, 7, 16);
5571388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractSRegister(instr, 5, 0);
5571488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSELEQ.F32 <Sd>, <Sn>, <Sm> ; A1
5571588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vseleq(F32, SRegister(rd), SRegister(rn), SRegister(rm));
5571688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5571788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5571888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000100: {
5571988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe000b00
5572088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
5572188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
5572288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
5572388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSELEQ.F64 <Dd>, <Dn>, <Dm> ; A1
5572488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vseleq(F64, DRegister(rd), DRegister(rn), DRegister(rm));
5572588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5572688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5572788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
5572888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe100a00
5572988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractSRegister(instr, 22, 12);
5573088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractSRegister(instr, 7, 16);
5573188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractSRegister(instr, 5, 0);
5573288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSELVS.F32 <Sd>, <Sn>, <Sm> ; A1
5573388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vselvs(F32, SRegister(rd), SRegister(rn), SRegister(rm));
5573488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5573588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5573688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100100: {
5573788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe100b00
5573888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
5573988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
5574088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
5574188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSELVS.F64 <Dd>, <Dn>, <Dm> ; A1
5574288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vselvs(F64, DRegister(rd), DRegister(rn), DRegister(rm));
5574388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5574488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5574588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
5574688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe200a00
5574788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractSRegister(instr, 22, 12);
5574888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractSRegister(instr, 7, 16);
5574988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractSRegister(instr, 5, 0);
5575088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSELGE.F32 <Sd>, <Sn>, <Sm> ; A1
5575188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vselge(F32, SRegister(rd), SRegister(rn), SRegister(rm));
5575288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5575388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5575488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200100: {
5575588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe200b00
5575688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
5575788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
5575888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
5575988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSELGE.F64 <Dd>, <Dn>, <Dm> ; A1
5576088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vselge(F64, DRegister(rd), DRegister(rn), DRegister(rm));
5576188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5576288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5576388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00300000: {
5576488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe300a00
5576588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractSRegister(instr, 22, 12);
5576688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractSRegister(instr, 7, 16);
5576788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractSRegister(instr, 5, 0);
5576888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSELGT.F32 <Sd>, <Sn>, <Sm> ; A1
5576988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vselgt(F32, SRegister(rd), SRegister(rn), SRegister(rm));
5577088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5577188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5577288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00300100: {
5577388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe300b00
5577488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
5577588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
5577688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
5577788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSELGT.F64 <Dd>, <Dn>, <Dm> ; A1
5577888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vselgt(F64, DRegister(rd), DRegister(rn), DRegister(rm));
5577988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5578088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5578188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800000: {
5578288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe800a00
5578388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractSRegister(instr, 22, 12);
5578488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractSRegister(instr, 7, 16);
5578588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractSRegister(instr, 5, 0);
5578688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMAXNM{<q>}.F32 <Sd>, <Sn>, <Sm> ; A2
5578788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmaxnm(F32, SRegister(rd), SRegister(rn), SRegister(rm));
5578888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5578988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5579088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800040: {
5579188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe800a40
5579288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractSRegister(instr, 22, 12);
5579388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractSRegister(instr, 7, 16);
5579488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractSRegister(instr, 5, 0);
5579588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMINNM{<q>}.F32 <Sd>, <Sn>, <Sm> ; A2
5579688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vminnm(F32, SRegister(rd), SRegister(rn), SRegister(rm));
5579788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5579888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5579988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800100: {
5580088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe800b00
5580188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
5580288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
5580388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
5580488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMAXNM{<q>}.F64 <Dd>, <Dn>, <Dm> ; A2
5580588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vmaxnm(F64, DRegister(rd), DRegister(rn), DRegister(rm));
5580688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5580788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5580888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800140: {
5580988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfe800b40
5581088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = ExtractDRegister(instr, 22, 12);
5581188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = ExtractDRegister(instr, 7, 16);
5581288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = ExtractDRegister(instr, 5, 0);
5581388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VMINNM{<q>}.F64 <Dd>, <Dn>, <Dm> ; A2
5581488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vminnm(F64, DRegister(rd), DRegister(rn), DRegister(rm));
5581588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5581688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5581788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00b00040: {
5581888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfeb00a40
5581988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
5582088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00080000: {
5582188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfeb80a40
5582288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00000080) == 0x00000000) {
5582388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractSRegister(instr, 22, 12);
5582488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractSRegister(instr, 5, 0);
5582588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRINTA{<q>}.F32.F32 <Sd>, <Sm> ; A1
5582688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrinta(F32, F32, SRegister(rd), SRegister(rm));
5582788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
5582888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5582988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5583088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5583188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5583288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00090000: {
5583388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfeb90a40
5583488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00000080) == 0x00000000) {
5583588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractSRegister(instr, 22, 12);
5583688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractSRegister(instr, 5, 0);
5583788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRINTN{<q>}.F32.F32 <Sd>, <Sm> ; A1
5583888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrintn(F32, F32, SRegister(rd), SRegister(rm));
5583988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
5584088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5584188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5584288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5584388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5584488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000a0000: {
5584588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfeba0a40
5584688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00000080) == 0x00000000) {
5584788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractSRegister(instr, 22, 12);
5584888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractSRegister(instr, 5, 0);
5584988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRINTP{<q>}.F32.F32 <Sd>, <Sm> ; A1
5585088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrintp(F32, F32, SRegister(rd), SRegister(rm));
5585188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
5585288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5585388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5585488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5585588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5585688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000b0000: {
5585788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebb0a40
5585888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00000080) == 0x00000000) {
5585988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractSRegister(instr, 22, 12);
5586088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractSRegister(instr, 5, 0);
5586188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRINTM{<q>}.F32.F32 <Sd>, <Sm> ; A1
5586288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrintm(F32, F32, SRegister(rd), SRegister(rm));
5586388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
5586488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5586588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5586688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5586788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5586888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000c0000: {
5586988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebc0a40
5587088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
5587188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5587288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5587388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5587488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5587588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
5587688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
5587788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VCVTA{<q>}.<dt>.F32 <Sd>, <Sm> ; A1
5587888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vcvta(dt, F32, SRegister(rd), SRegister(rm));
5587988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5588088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5588188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000d0000: {
5588288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebd0a40
5588388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
5588488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5588588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5588688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5588788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5588888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
5588988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
5589088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VCVTN{<q>}.<dt>.F32 <Sd>, <Sm> ; A1
5589188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vcvtn(dt, F32, SRegister(rd), SRegister(rm));
5589288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5589388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5589488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000e0000: {
5589588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebe0a40
5589688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
5589788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5589888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5589988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5590088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5590188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
5590288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
5590388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VCVTP{<q>}.<dt>.F32 <Sd>, <Sm> ; A1
5590488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vcvtp(dt, F32, SRegister(rd), SRegister(rm));
5590588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5590688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5590788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
5590888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebf0a40
5590988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
5591088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5591188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5591288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5591388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5591488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
5591588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
5591688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VCVTM{<q>}.<dt>.F32 <Sd>, <Sm> ; A1
5591788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vcvtm(dt, F32, SRegister(rd), SRegister(rm));
5591888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5591988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
559204339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5592188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5592288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5592388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5592488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5592588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5592688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00b00140: {
5592788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0xfeb00b40
5592888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
5592988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00080000: {
5593088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfeb80b40
5593188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00000080) == 0x00000000) {
5593288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
5593388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
5593488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRINTA{<q>}.F64.F64 <Dd>, <Dm> ; A1
5593588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrinta(F64, F64, DRegister(rd), DRegister(rm));
5593688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
5593788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5593888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5593988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5594088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5594188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00090000: {
5594288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfeb90b40
5594388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00000080) == 0x00000000) {
5594488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
5594588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
5594688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRINTN{<q>}.F64.F64 <Dd>, <Dm> ; A1
5594788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrintn(F64, F64, DRegister(rd), DRegister(rm));
5594888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
5594988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5595088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5595188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5595288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5595388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000a0000: {
5595488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfeba0b40
5595588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00000080) == 0x00000000) {
5595688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
5595788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
5595888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRINTP{<q>}.F64.F64 <Dd>, <Dm> ; A1
5595988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrintp(F64, F64, DRegister(rd), DRegister(rm));
5596088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
5596188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5596288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5596388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5596488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5596588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000b0000: {
5596688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebb0b40
5596788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00000080) == 0x00000000) {
5596888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = ExtractDRegister(instr, 22, 12);
5596988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = ExtractDRegister(instr, 5, 0);
5597088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VRINTM{<q>}.F64.F64 <Dd>, <Dm> ; A1
5597188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vrintm(F64, F64, DRegister(rd), DRegister(rm));
5597288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
5597388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5597488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5597588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5597688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5597788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000c0000: {
5597888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebc0b40
5597988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
5598088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5598188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5598288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5598388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5598488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
5598588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
5598688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VCVTA{<q>}.<dt>.F64 <Sd>, <Dm> ; A1
5598788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vcvta(dt, F64, SRegister(rd), DRegister(rm));
5598888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5598988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5599088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000d0000: {
5599188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebd0b40
5599288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
5599388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5599488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5599588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5599688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5599788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
5599888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
5599988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VCVTN{<q>}.<dt>.F64 <Sd>, <Dm> ; A1
5600088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vcvtn(dt, F64, SRegister(rd), DRegister(rm));
5600188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5600288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5600388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000e0000: {
5600488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebe0b40
5600588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
5600688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5600788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5600888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5600988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5601088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
5601188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
5601288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VCVTP{<q>}.<dt>.F64 <Sd>, <Dm> ; A1
5601388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vcvtp(dt, F64, SRegister(rd), DRegister(rm));
5601488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5601588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5601688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
5601788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0xfebf0b40
5601888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
5601988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (dt.Is(kDataTypeValueInvalid)) {
5602088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5602188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5602288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5602388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
5602488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
5602588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VCVTM{<q>}.<dt>.F64 <Sd>, <Dm> ; A1
5602688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vcvtm(dt, F64, SRegister(rd), DRegister(rm));
5602788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5602888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
560294339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5603088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5603188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5603288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5603388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5603488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
560354339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
5603688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
5603788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5603888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5603988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5604088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5604188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
5604288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xe00) == 0xa00)) {
5604388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5604488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
5604588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5604688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("CDP2", instr);
5604788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5604888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5604988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5605088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5605188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5605288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000010: {
5605388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0xfe000010
5605488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
5605588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
5605688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xfe000010
5605788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xe00) == 0xa00)) {
5605888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5605988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
5606088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5606188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("MCR2", instr);
5606288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5606388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5606488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
5606588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0xfe100010
5606688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xe00) == 0xa00)) {
5606788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
5606888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
5606988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5607088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("MRC2", instr);
5607188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5607288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5607388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5607488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5607588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
560764339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard          default:
5607788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnallocatedA32(instr);
5607888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5607988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
5608088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
5608188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
5608288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
5608388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else {
5608488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    switch (instr & 0x0e000000) {
5608588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x00000000: {
5608688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0x00000000
5608788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x00100010) {
5608888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
5608988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x00000000
5609088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x01a00000) {
5609188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
5609288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00000000
5609388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00400000) {
5609488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5609588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00000000
5609688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5609788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5609888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00000060
5609988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5610088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5610188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5610288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5610388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5610488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5610588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5610688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5610788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // AND{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5610888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        and_(condition,
5610988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5611088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5611188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
5611288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), RRX));
5611388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5611488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5611588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5611688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5611788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5611888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5611988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5612088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5612188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5612288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5612388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5612488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5612588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5612688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5612788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
56128d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // AND{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5612988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        and_(condition,
5613088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5613188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5613288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
5613388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm),
5613488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetType(),
5613588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetAmount()));
5613688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5613788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5613888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5613988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5614088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5614188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00400000: {
5614288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00400000
5614388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
5614488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000d0000: {
5614588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x004d0000
5614688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000fe0) {
5614788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000060: {
5614888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x004d0060
5614988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
5615088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5615188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5615288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5615388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5615488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5615588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5615688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SUB{<c>}{<q>} {<Rd>}, SP, <Rm>, RRX ; A1
5615788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(condition,
5615888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
5615988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
5616088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sp,
5616188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm), RRX));
5616288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5616388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5616488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5616588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5616688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xfe0) == 0x60)) {
5616788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5616888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5616988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5617088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5617188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5617288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5617388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ImmediateShiftOperand shift_operand((instr >> 5) &
5617488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0x3,
5617588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                (instr >> 7) &
5617688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0x1f);
56177d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // SUB{<c>}{<q>} {<Rd>}, SP, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5617888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(condition,
5617988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
5618088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
5618188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sp,
5618288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm),
5618388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetType(),
5618488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetAmount()));
5618588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5618688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5618788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5618888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5618988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5619088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5619188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000fe0) {
5619288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000060: {
5619388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x00400060
5619488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5619588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xd0000)) {
5619688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5619788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5619888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5619988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5620088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5620188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5620288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5620388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // SUB{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5620488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(condition,
5620588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
5620688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
5620788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
5620888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm), RRX));
5620988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5621088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5621188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5621288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5621388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xd0000) ||
5621488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xfe0) == 0x60)) {
5621588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5621688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5621788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5621888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5621988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5622088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5622188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5622288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ImmediateShiftOperand shift_operand((instr >> 5) &
5622388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0x3,
5622488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                (instr >> 7) &
5622588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0x1f);
56226d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // SUB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5622788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            sub(condition,
5622888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
5622988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
5623088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
5623188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm),
5623288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetType(),
5623388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetAmount()));
5623488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5623588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5623688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5623788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5623888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5623988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5624088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5624188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5624288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5624388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5624488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5624588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00200000: {
5624688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00200000
5624788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00400000) {
5624888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5624988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00200000
5625088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5625188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5625288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00200060
5625388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5625488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5625588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5625688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5625788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5625888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5625988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5626088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5626188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // EOR{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5626288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        eor(condition,
5626388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5626488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5626588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5626688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5626788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5626888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5626988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5627088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5627188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5627288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5627388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5627488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5627588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5627688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5627788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5627888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5627988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5628088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5628188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
56282d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // EOR{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5628388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        eor(condition,
5628488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5628588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5628688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5628788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5628888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5628988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5629088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5629188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5629288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5629388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5629488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5629588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00400000: {
5629688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00600000
5629788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5629888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5629988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00600060
5630088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5630188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5630288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5630388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5630488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5630588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5630688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5630788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5630888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // RSB{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5630988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        rsb(condition,
5631088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5631188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5631288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5631388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5631488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5631588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5631688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5631788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5631888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5631988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5632088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5632188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5632288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5632388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5632488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5632588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5632688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5632788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5632888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
56329d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // RSB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5633088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        rsb(condition,
5633188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5633288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5633388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5633488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5633588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5633688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5633788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5633888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5633988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5634088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5634188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5634288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5634388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5634488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5634588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
5634688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00800000
5634788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00400000) {
5634888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5634988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00800000
5635088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
5635188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000d0000: {
5635288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x008d0000
5635388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000fe0) {
5635488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000060: {
5635588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x008d0060
5635688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
5635788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5635888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5635988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5636088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5636188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5636288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5636388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADD{<c>}{<q>} {<Rd>}, SP, <Rm>, RRX ; A1
5636488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(condition,
5636588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
5636688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
5636788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sp,
5636888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm), RRX));
5636988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5637088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5637188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5637288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5637388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xfe0) == 0x60)) {
5637488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5637588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5637688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5637788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5637888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5637988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5638088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ImmediateShiftOperand shift_operand((instr >> 5) &
5638188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0x3,
5638288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                (instr >> 7) &
5638388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0x1f);
56384d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // ADD{<c>}{<q>} {<Rd>}, SP, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5638588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(condition,
5638688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
5638788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
5638888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sp,
5638988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm),
5639088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetType(),
5639188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetAmount()));
5639288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5639388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5639488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5639588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5639688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5639788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5639888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000fe0) {
5639988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000060: {
5640088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x00800060
5640188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5640288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xd0000)) {
5640388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5640488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5640588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5640688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5640788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5640888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5640988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5641088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // ADD{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5641188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(condition,
5641288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
5641388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
5641488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
5641588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm), RRX));
5641688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5641788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5641888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
5641988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5642088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xd0000) ||
5642188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xfe0) == 0x60)) {
5642288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5642388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5642488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5642588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5642688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5642788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5642888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rm = instr & 0xf;
5642988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ImmediateShiftOperand shift_operand((instr >> 5) &
5643088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0x3,
5643188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                (instr >> 7) &
5643288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                    0x1f);
56433d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // ADD{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5643488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            add(condition,
5643588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Best,
5643688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
5643788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
5643888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm),
5643988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetType(),
5644088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                        shift_operand.GetAmount()));
5644188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5644288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5644388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5644488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5644588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5644688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5644788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5644888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5644988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00400000: {
5645088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00c00000
5645188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5645288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5645388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00c00060
5645488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5645588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5645688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5645788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5645888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5645988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5646088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5646188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5646288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SBC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5646388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sbc(condition,
5646488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5646588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5646688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5646788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5646888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5646988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5647088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5647188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5647288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5647388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5647488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5647588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5647688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5647788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5647888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5647988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5648088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5648188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5648288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
56483d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // SBC{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5648488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sbc(condition,
5648588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5648688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5648788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5648888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5648988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5649088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5649188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5649288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5649388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5649488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5649588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5649688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5649788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5649888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5649988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00a00000: {
5650088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00a00000
5650188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00400000) {
5650288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5650388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00a00000
5650488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5650588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5650688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00a00060
5650788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5650888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5650988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5651088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5651188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5651288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5651388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5651488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5651588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ADC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5651688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        adc(condition,
5651788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5651888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5651988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5652088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5652188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5652288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5652388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5652488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5652588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5652688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5652788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5652888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5652988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5653088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5653188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5653288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5653388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5653488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5653588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
56536d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // ADC{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5653788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        adc(condition,
5653888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5653988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5654088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5654188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5654288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5654388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5654488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5654588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5654688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5654788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5654888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5654988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00400000: {
5655088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00e00000
5655188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5655288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5655388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00e00060
5655488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5655588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5655688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5655788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5655888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5655988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5656088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5656188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5656288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // RSC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5656388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        rsc(condition,
5656488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5656588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5656688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5656788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5656888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5656988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5657088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5657188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5657288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5657388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5657488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5657588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5657688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5657788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5657888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5657988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5658088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5658188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
56582d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // RSC{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5658388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        rsc(condition,
5658488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5658588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5658688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5658788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5658888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5658988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5659088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5659188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5659288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5659388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5659488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5659588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5659688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5659788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01000000: {
5659888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01000000
5659988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000000e0) {
5660088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5660188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01000000
5660288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000200) {
5660388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5660488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01000000
5660588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5660688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5660788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5660888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5660988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5661088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5661188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned spec_reg = (instr >> 22) & 0x1;
5661288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MRS{<c>}{<q>} <Rd>, <spec_reg> ; A1
5661388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mrs(condition, Register(rd), SpecialRegister(spec_reg));
5661488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfbf0fff) != 0x10f0000)) {
5661588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5661688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5661788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5661888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5661988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
5662088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01000200
5662188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5662288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5662388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5662488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5662588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("MRS", instr);
5662688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5662788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5662888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5662988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5663088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5663188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000040: {
5663288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01000040
5663388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400200) {
5663488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5663588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01000040
5663688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5663788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5663888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5663988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5664088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5664188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5664288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5664388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // CRC32B{<q>} <Rd>, <Rn>, <Rm> ; A1
5664488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        crc32b(al, Register(rd), Register(rn), Register(rm));
5664588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1000040)) {
5664688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5664788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5664888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5664988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5665088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
5665188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01000240
5665288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5665388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5665488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5665588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5665688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5665788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5665888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5665988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // CRC32CB{<q>} <Rd>, <Rn>, <Rm> ; A1
5666088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        crc32cb(al, Register(rd), Register(rn), Register(rm));
5666188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1000240)) {
5666288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5666388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5666488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5666588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5666688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5666788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01400040
5666888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5666988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5667088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5667188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5667288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5667388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5667488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5667588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // CRC32W{<q>} <Rd>, <Rn>, <Rm> ; A1
5667688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        crc32w(al, Register(rd), Register(rn), Register(rm));
5667788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1400040)) {
5667888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5667988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5668088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5668188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5668288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400200: {
5668388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01400240
5668488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5668588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5668688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5668788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5668888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5668988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5669088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5669188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // CRC32CW{<q>} <Rd>, <Rn>, <Rm> ; A1
5669288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        crc32cw(al, Register(rd), Register(rn), Register(rm));
5669388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1400240)) {
5669488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5669588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5669688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5669788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5669888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5669988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5670088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5670188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000080: {
5670288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01000080
5670388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400000) {
5670488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5670588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01000080
5670688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5670788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5670888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5670988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5671088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5671188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5671288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5671388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5671488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
5671588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLABB{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
5671688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlabb(condition,
5671788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5671888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5671988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5672088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(ra));
5672188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5672288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5672388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5672488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01400080
5672588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5672688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5672788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5672888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5672988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5673088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5673188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5673288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5673388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5673488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLALBB{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5673588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlalbb(condition,
5673688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rdlo),
5673788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rdhi),
5673888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
5673988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
5674088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5674188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5674288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5674388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5674488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5674588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000000a0: {
5674688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x010000a0
5674788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400000) {
5674888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5674988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x010000a0
5675088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5675188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5675288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5675388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5675488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5675588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5675688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5675788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5675888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
5675988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLATB{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
5676088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlatb(condition,
5676188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5676288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5676388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5676488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(ra));
5676588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5676688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5676788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5676888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x014000a0
5676988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5677088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5677188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5677288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5677388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5677488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5677588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5677688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5677788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5677888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLALTB{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5677988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlaltb(condition,
5678088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rdlo),
5678188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rdhi),
5678288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
5678388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
5678488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5678588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5678688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5678788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5678888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5678988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000000c0: {
5679088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x010000c0
5679188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400000) {
5679288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5679388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x010000c0
5679488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5679588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5679688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5679788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5679888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5679988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5680088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5680188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5680288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
5680388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLABT{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
5680488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlabt(condition,
5680588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5680688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5680788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5680888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(ra));
5680988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5681088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5681188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5681288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x014000c0
5681388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5681488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5681588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5681688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5681788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5681888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5681988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5682088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5682188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5682288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLALBT{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5682388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlalbt(condition,
5682488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rdlo),
5682588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rdhi),
5682688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
5682788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
5682888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5682988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5683088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5683188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5683288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5683388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000000e0: {
5683488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x010000e0
5683588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400000) {
5683688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5683788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x010000e0
5683888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5683988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5684088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5684188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5684288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5684388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5684488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5684588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5684688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
5684788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLATT{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
5684888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlatt(condition,
5684988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5685088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5685188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5685288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(ra));
5685388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5685488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5685588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5685688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x014000e0
5685788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5685888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5685988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5686088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5686188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5686288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5686388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5686488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5686588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5686688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLALTT{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5686788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlaltt(condition,
5686888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rdlo),
5686988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rdhi),
5687088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
5687188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm));
5687288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5687388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5687488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5687588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5687688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
568774339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
5687888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
5687988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5688088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5688188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5688288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5688388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01200000: {
5688488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01200000
5688588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000000e0) {
5688688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5688788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01200000
5688888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000200) {
5688988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5689088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200000
5689188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5689288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5689388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5689488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5689588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5689688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned spec_reg =
5689788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr >> 16) & 0xf) | ((instr >> 18) & 0x10);
5689888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5689988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MSR{<c>}{<q>} <spec_reg>, <Rn> ; A1
5690088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        msr(condition,
5690188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            MaskedSpecialRegister(spec_reg),
5690288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn));
5690388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfb0fff0) != 0x120f000)) {
5690488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5690588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5690688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5690788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5690888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
5690988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200200
5691088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5691188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5691288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5691388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5691488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("MSR", instr);
5691588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5691688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5691788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5691888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5691988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5692088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000020: {
5692188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01200020
5692288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x00400000) == 0x00000000) {
5692388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xf0000000) == 0xf0000000)) {
5692488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5692588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
5692688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5692788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5692888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5692988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // BXJ{<c>}{<q>} <Rm> ; A1
5693088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      bxj(condition, Register(rm));
5693188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xffffff0) != 0x12fff20)) {
5693288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5693388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5693488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
5693588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5693688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5693788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5693888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5693988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000040: {
5694088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01200040
5694188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400200) {
5694288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5694388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200040
5694488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5694588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5694688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5694788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5694888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5694988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5695088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5695188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // CRC32H{<q>} <Rd>, <Rn>, <Rm> ; A1
5695288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        crc32h(al, Register(rd), Register(rn), Register(rm));
5695388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1200040)) {
5695488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5695588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5695688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5695788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5695888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000200: {
5695988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200240
5696088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5696188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5696288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5696388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5696488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5696588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5696688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5696788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // CRC32CH{<q>} <Rd>, <Rn>, <Rm> ; A1
5696888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        crc32ch(al, Register(rd), Register(rn), Register(rm));
5696988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1200240)) {
5697088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5697188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5697288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5697388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
569744339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5697588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5697688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5697788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5697888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5697988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5698088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5698188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01200060
5698288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x00400000) == 0x00400000) {
5698388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xf0000000) == 0xf0000000)) {
5698488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5698588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
5698688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5698788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnimplementedA32("ERET", instr);
5698888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
5698988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5699088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5699188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5699288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5699388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000080: {
5699488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01200080
5699588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400000) {
5699688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5699788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200080
5699888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5699988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5700088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5700188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5700288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5700388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5700488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5700588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5700688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
5700788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLAWB{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
5700888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlawb(condition,
5700988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5701088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5701188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5701288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(ra));
5701388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5701488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5701588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5701688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01600080
5701788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5701888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5701988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5702088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5702188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5702288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5702388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5702488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5702588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMULBB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
5702688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smulbb(condition,
5702788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5702888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5702988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
5703088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0f0f0) != 0x1600080)) {
5703188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5703288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5703388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5703488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5703588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5703688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5703788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5703888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000000a0: {
5703988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x012000a0
5704088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400000) {
5704188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5704288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x012000a0
5704388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5704488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5704588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5704688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5704788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5704888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5704988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5705088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5705188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMULWB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
5705288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smulwb(condition,
5705388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5705488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5705588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
5705688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0f0f0) != 0x12000a0)) {
5705788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5705888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5705988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5706088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5706188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5706288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x016000a0
5706388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5706488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5706588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5706688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5706788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5706888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5706988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5707088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5707188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMULTB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
5707288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smultb(condition,
5707388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5707488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5707588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
5707688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0f0f0) != 0x16000a0)) {
5707788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5707888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5707988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5708088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5708188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5708288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5708388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5708488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000000c0: {
5708588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x012000c0
5708688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400000) {
5708788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5708888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x012000c0
5708988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5709088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5709188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5709288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5709388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5709488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5709588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5709688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5709788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
5709888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLAWT{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
5709988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlawt(condition,
5710088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5710188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5710288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
5710388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(ra));
5710488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5710588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5710688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5710788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x016000c0
5710888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5710988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5711088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5711188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5711288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5711388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5711488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5711588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5711688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMULBT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
5711788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smulbt(condition,
5711888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5711988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5712088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
5712188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0f0f0) != 0x16000c0)) {
5712288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5712388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5712488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5712588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5712688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5712788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5712888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5712988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000000e0: {
5713088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x012000e0
5713188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00400000) {
5713288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5713388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x012000e0
5713488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5713588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5713688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5713788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5713888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5713988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5714088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5714188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5714288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMULWT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
5714388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smulwt(condition,
5714488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5714588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5714688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
5714788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0f0f0) != 0x12000e0)) {
5714888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5714988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5715088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5715188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5715288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00400000: {
5715388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x016000e0
5715488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5715588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5715688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5715788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5715888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5715988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5716088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5716188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5716288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMULTT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
5716388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smultt(condition,
5716488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5716588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
5716688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
5716788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0f0f0) != 0x16000e0)) {
5716888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5716988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5717088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5717188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5717288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5717388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5717488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5717588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5717688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5717788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5717888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01800000: {
5717988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01800000
5718088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00400000) {
5718188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5718288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01800000
5718388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5718488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5718588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01800060
5718688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5718788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5718888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5718988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5719088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5719188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5719288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5719388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5719488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ORR{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5719588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        orr(condition,
5719688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5719788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5719888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5719988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5720088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5720188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5720288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5720388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5720488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5720588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5720688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5720788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5720888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5720988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5721088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5721188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5721288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5721388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5721488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
57215d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // ORR{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5721688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        orr(condition,
5721788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5721888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5721988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5722088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5722188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5722288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5722388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5722488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5722588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5722688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5722788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5722888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00400000: {
5722988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01c00000
5723088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5723188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5723288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01c00060
5723388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5723488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5723588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5723688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5723788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5723888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5723988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5724088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5724188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // BIC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5724288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        bic(condition,
5724388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5724488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5724588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5724688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5724788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5724888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5724988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5725088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5725188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5725288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5725388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5725488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5725588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5725688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5725788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5725888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5725988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5726088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5726188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
57262d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // BIC{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5726388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        bic(condition,
5726488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5726588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5726688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5726788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5726888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5726988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5727088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5727188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5727288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5727388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5727488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5727588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5727688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5727788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5727888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01a00000: {
5727988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01a00000
5728088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00400000) {
5728188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5728288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01a00000
5728388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5728488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5728588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01a00060
5728688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5728788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5728888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5728988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5729088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) != 0xf0000000)) {
5729188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 28) & 0xf);
5729288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 12) & 0xf;
5729388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
5729488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // RRX{<c>}{<q>} {<Rd>}, <Rm> ; A1
5729588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          rrx(condition, Register(rd), Register(rm));
5729688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0ff0) != 0x1a00060)) {
5729788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableA32(instr);
5729888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5729988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5730088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5730188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5730288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5730388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5730488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MOV{<c>}{<q>} <Rd>, <Rm>, RRX ; A1
5730588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mov(condition,
5730688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5730788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5730888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5730988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff0ff0) != 0x1a00060)) {
5731088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5731188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5731288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5731388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5731488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5731588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5731688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5731788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5731888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5731988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5732088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 5)) & Uint32(0x3)) ==
5732188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x2)) &&
5732288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000000) != 0xf0000000)) {
5732388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 28) & 0xf);
5732488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 12) & 0xf;
5732588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
5732688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t amount = (instr >> 7) & 0x1f;
5732788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (amount == 0) amount = 32;
5732888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ASR{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; A1
5732988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          asr(condition,
5733088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
5733188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
5733288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm),
5733388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              amount);
5733488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0070) != 0x1a00040)) {
5733588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableA32(instr);
5733688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5733788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5733888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5733988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 5)) & Uint32(0x3)) ==
5734088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x0)) &&
5734188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000000) != 0xf0000000) &&
5734288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0x00000f80) != 0x00000000)) {
5734388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 28) & 0xf);
5734488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 12) & 0xf;
5734588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
5734688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t amount = (instr >> 7) & 0x1f;
5734788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // LSL{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; A1
5734888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          lsl(condition,
5734988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
5735088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
5735188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm),
5735288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              amount);
5735388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0070) != 0x1a00000)) {
5735488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableA32(instr);
5735588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5735688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5735788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5735888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 5)) & Uint32(0x3)) ==
5735988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x1)) &&
5736088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000000) != 0xf0000000)) {
5736188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 28) & 0xf);
5736288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 12) & 0xf;
5736388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
5736488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t amount = (instr >> 7) & 0x1f;
5736588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (amount == 0) amount = 32;
5736688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // LSR{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; A1
5736788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          lsr(condition,
5736888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
5736988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
5737088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm),
5737188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              amount);
5737288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0070) != 0x1a00020)) {
5737388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableA32(instr);
5737488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5737588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5737688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5737788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 5)) & Uint32(0x3)) ==
5737888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x3)) &&
5737988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000000) != 0xf0000000) &&
5738088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0x00000f80) != 0x00000000)) {
5738188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 28) & 0xf);
5738288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 12) & 0xf;
5738388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rm = instr & 0xf;
5738488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t amount = (instr >> 7) & 0x1f;
5738588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // ROR{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; A1
5738688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          ror(condition,
5738788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Best,
5738888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
5738988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm),
5739088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              amount);
5739188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xfff0070) != 0x1a00060)) {
5739288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableA32(instr);
5739388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5739488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5739588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5739688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5739788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5739888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5739988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5740088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5740188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
5740288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MOV{<c>}{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; A1
5740388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mov(condition,
5740488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5740588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5740688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5740788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5740888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5740988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff0010) != 0x1a00000)) {
5741088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5741188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5741288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5741388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5741488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5741588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5741688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5741788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00400000: {
5741888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01e00000
5741988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5742088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5742188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01e00060
5742288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5742388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5742488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5742588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5742688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5742788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5742888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5742988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MVN{<c>}{<q>} <Rd>, <Rm>, RRX ; A1
5743088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mvn(condition,
5743188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5743288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5743388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), RRX));
5743488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff0ff0) != 0x1e00060)) {
5743588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5743688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5743788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5743888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5743988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5744088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5744188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5744288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5744388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5744488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5744588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5744688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5744788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5744888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5744988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5745088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
5745188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MVN{<c>}{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; A1
5745288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mvn(condition,
5745388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5745488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5745588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm),
5745688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetType(),
5745788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    shift_operand.GetAmount()));
5745888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff0010) != 0x1e00000)) {
5745988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5746088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5746188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5746288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5746388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5746488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5746588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5746688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5746788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5746888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5746988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5747088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5747188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5747288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000010: {
5747388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x00000010
5747488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400080) {
5747588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
5747688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00000010
5747788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01a00000) {
5747888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5747988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00000010
5748088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5748188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5748288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5748388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5748488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5748588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5748688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5748788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5748888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5748988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5749088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // AND{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5749188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    and_(condition,
5749288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5749388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5749488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5749588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
5749688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5749788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5749888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
5749988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00200010
5750088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5750188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5750288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5750388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5750488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5750588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5750688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5750788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5750888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5750988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5751088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // EOR{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5751188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    eor(condition,
5751288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5751388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5751488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5751588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5751688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5751788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5751888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800000: {
5751988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00800010
5752088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5752188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5752288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5752388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5752488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5752588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5752688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5752788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5752888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5752988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5753088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADD{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5753188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    add(condition,
5753288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5753388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5753488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5753588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5753688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5753788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5753888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00a00000: {
5753988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00a00010
5754088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5754188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5754288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5754388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5754488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5754588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5754688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5754788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5754888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5754988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5755088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5755188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    adc(condition,
5755288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5755388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5755488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5755588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5755688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5755788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5755888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
5755988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01000010
5756088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000060) {
5756188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000040: {
5756288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01000050
5756388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5756488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5756588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5756688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5756788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5756888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5756988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5757088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5757188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // QADD{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; A1
5757288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        qadd(condition,
5757388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5757488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm),
5757588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn));
5757688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1000050)) {
5757788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5757888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5757988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5758088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5758188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5758288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01000070
5758388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5758488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5758588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5758688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5758788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = (instr & 0xf) | ((instr >> 4) & 0xfff0);
5758888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // HLT{<q>} {#}<imm> ; A1
5758988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        hlt(al, imm);
5759088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5759188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
575924339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5759388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5759488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5759588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5759688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5759788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5759888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
5759988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01200010
5760088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000060) {
5760188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5760288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200010
5760388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5760488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5760588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5760688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5760788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5760888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5760988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // BX{<c>}{<q>} <Rm> ; A1
5761088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        bx(condition, Register(rm));
5761188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xffffff0) != 0x12fff10)) {
5761288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5761388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5761488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5761588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5761688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000020: {
5761788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200030
5761888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5761988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5762088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5762188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5762288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5762388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5762488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // BLX{<c>}{<q>} <Rm> ; A1
5762588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        blx(condition, Register(rm));
5762688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xffffff0) != 0x12fff30)) {
5762788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5762888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5762988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5763088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5763188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000040: {
5763288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200050
5763388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5763488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5763588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5763688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5763788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5763888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5763988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5764088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5764188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // QSUB{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; A1
5764288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        qsub(condition,
5764388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5764488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm),
5764588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn));
5764688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1200050)) {
5764788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5764888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5764988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5765088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5765188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5765288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01200070
5765388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5765488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5765588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5765688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5765788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = (instr & 0xf) | ((instr >> 4) & 0xfff0);
5765888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // BKPT{<q>} {#}<imm> ; A1
5765988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        bkpt(al, imm);
5766088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5766188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5766288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5766388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5766488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5766588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01800000: {
5766688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01800010
5766788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5766888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5766988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5767088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5767188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5767288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5767388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5767488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5767588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5767688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5767788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ORR{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5767888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    orr(condition,
5767988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5768088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5768188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5768288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5768388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5768488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5768588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01a00000: {
5768688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01a00010
5768788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5768888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5768988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5769088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5769188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x2)) &&
5769288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
5769388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5769488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5769588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5769688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rs = (instr >> 8) & 0xf;
5769788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // ASR{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; A1
5769888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      asr(condition,
5769988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
5770088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
5770188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm),
5770288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rs));
5770388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff00f0) != 0x1a00050)) {
5770488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5770588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5770688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5770788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5770888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x0)) &&
5770988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
5771088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5771188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5771288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5771388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rs = (instr >> 8) & 0xf;
5771488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // LSL{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; A1
5771588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      lsl(condition,
5771688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
5771788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
5771888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm),
5771988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rs));
5772088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff00f0) != 0x1a00010)) {
5772188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5772288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5772388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5772488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5772588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x1)) &&
5772688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
5772788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5772888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5772988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5773088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rs = (instr >> 8) & 0xf;
5773188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // LSR{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; A1
5773288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      lsr(condition,
5773388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
5773488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
5773588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm),
5773688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rs));
5773788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff00f0) != 0x1a00030)) {
5773888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5773988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5774088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5774188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5774288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x3)) &&
5774388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
5774488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5774588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5774688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5774788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rs = (instr >> 8) & 0xf;
5774888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // ROR{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; A1
5774988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      ror(condition,
5775088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
5775188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
5775288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm),
5775388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rs));
5775488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff00f0) != 0x1a00070)) {
5775588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5775688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5775788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5775888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5775988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5776088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5776188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5776288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5776388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5776488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOV{<c>}{<q>} <Rd>, <Rm>, <shift> <Rs> ; A1
5776588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mov(condition,
5776688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5776788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5776888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5776988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0090) != 0x1a00010)) {
5777088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5777188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5777288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5777388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5777488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5777588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5777688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5777788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000080: {
5777888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00000090
5777988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01200060) {
5778088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5778188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00000090
5778288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800000) {
5778388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5778488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00000090
5778588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5778688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5778788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5778888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5778988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5779088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5779188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5779288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5779388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MUL{<c>}{<q>} <Rd>, <Rn>, {<Rm>} ; A1
5779488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mul(condition,
5779588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Best,
5779688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5779788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5779888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
5779988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0f0f0) != 0x90)) {
5780088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5780188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5780288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5780388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5780488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
5780588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00800090
5780688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5780788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5780888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5780988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5781088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5781188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5781288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5781388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5781488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5781588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // UMULL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5781688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        umull(condition,
5781788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
5781888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
5781988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
5782088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
5782188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5782288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5782388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5782488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5782588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5782688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000020: {
5782788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x000000b0
5782888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5782988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5783088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5783188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5783288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5783388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5783488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5783588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5783688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5783788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // STRH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<Rm> ; A1
5783888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    strh(condition,
5783988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5784088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5784188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5784288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5784388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5784488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    PostIndex));
5784588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0xb0)) {
5784688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5784788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5784888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5784988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5785088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000040: {
5785188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x000000d0
5785288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5785388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5785488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5785588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5785688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5785788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5785888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5785988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5786088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5786188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>], #{+/-}<Rm> ; A1
5786288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrd(condition,
5786388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5786488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt + 1),
5786588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5786688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5786788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5786888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    PostIndex));
5786988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0xd0)) {
5787088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5787188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5787288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5787388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5787488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5787588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x000000f0
5787688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5787788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5787888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5787988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5788088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5788188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5788288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5788388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5788488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5788588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>], #{+/-}<Rm> ; A1
5788688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    strd(condition,
5788788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5788888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt + 1),
5788988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5789088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5789188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5789288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    PostIndex));
5789388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0xf0)) {
5789488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5789588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5789688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5789788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5789888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
5789988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00200090
5790088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800000) {
5790188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5790288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00200090
5790388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5790488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5790588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5790688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5790788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5790888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5790988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5791088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5791188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
5791288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MLA{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
5791388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mla(condition,
5791488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5791588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5791688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm),
5791788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(ra));
5791888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5791988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5792088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
5792188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00a00090
5792288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5792388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5792488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5792588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5792688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5792788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5792888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5792988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5793088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5793188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // UMLAL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5793288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        umlal(condition,
5793388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
5793488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
5793588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
5793688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
5793788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5793888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5793988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5794088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5794188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5794288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200020: {
5794388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x002000b0
5794488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5794588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5794688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5794788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5794888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("STRHT", instr);
5794988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5795088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5795188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
5795288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01000090
5795388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800300) {
5795488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
5795588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01800090
5795688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5795788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5795888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5795988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5796088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5796188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = instr & 0xf;
5796288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5796388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // STL{<c>}{<q>} <Rt>, [<Rn>] ; A1
5796488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        stl(condition,
5796588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rt),
5796688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            MemOperand(Register(rn), Offset));
5796788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0fff0) != 0x180fc90)) {
5796888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5796988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5797088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5797188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5797288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800200: {
5797388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01800290
5797488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5797588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5797688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5797788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5797888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5797988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5798088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = instr & 0xf;
5798188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5798288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // STLEX{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; A1
5798388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        stlex(condition,
5798488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
5798588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rt),
5798688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              MemOperand(Register(rn), Offset));
5798788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1800e90)) {
5798888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5798988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5799088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5799188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5799288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800300: {
5799388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01800390
5799488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5799588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5799688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5799788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5799888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5799988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5800088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = instr & 0xf;
5800188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5800288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // STREX{<c>}{<q>} <Rd>, <Rt>, [<Rn>{, #<imm_1>}] ; A1
5800388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        strex(condition,
5800488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
5800588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rt),
5800688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              MemOperand(Register(rn), plus, 0, Offset));
5800788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1800f90)) {
5800888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5800988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5801088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5801188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
580124339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5801388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5801488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5801588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5801688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5801788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5801888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000020: {
5801988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x010000b0
5802088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5802188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5802288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5802388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5802488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5802588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5802688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5802788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5802888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5802988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = Offset;
5803088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // STRH{<c>}{<q>} <Rt>, [<Rn>, #{+/-}<Rm>] ; A1
5803188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    strh(condition,
5803288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5803388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5803488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5803588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5803688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5803788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    addrmode));
5803888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x10000b0)) {
5803988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5804088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5804188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5804288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5804388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000040: {
5804488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x010000d0
5804588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5804688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5804788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5804888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5804988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5805088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5805188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5805288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5805388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5805488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = Offset;
5805588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>, #{+/-}<Rm>] ; A1
5805688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrd(condition,
5805788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5805888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt + 1),
5805988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5806088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5806188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5806288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    addrmode));
5806388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x10000d0)) {
5806488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5806588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5806688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5806788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5806888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000060: {
5806988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x010000f0
5807088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5807188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5807288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5807388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5807488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5807588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5807688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5807788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5807888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5807988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = Offset;
5808088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>, #{+/-}<Rm>] ; A1
5808188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    strd(condition,
5808288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5808388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt + 1),
5808488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5808588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5808688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5808788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    addrmode));
5808888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x10000f0)) {
5808988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5809088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5809188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5809288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5809388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
5809488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01200090
5809588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800300) {
5809688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800200: {
5809788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01a00290
5809888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5809988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5810088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5810188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5810288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5810388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5810488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = instr & 0xf;
5810588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5810688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // STLEXD{<c>}{<q>} <Rd>, <Rt>, <Rt2>, [<Rn>] ; A1
5810788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        stlexd(condition,
5810888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5810988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
5811088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt + 1),
5811188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn), Offset));
5811288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1a00e90)) {
5811388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5811488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5811588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5811688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5811788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800300: {
5811888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01a00390
5811988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5812088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5812188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5812288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5812388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5812488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5812588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = instr & 0xf;
5812688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5812788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // STREXD{<c>}{<q>} <Rd>, <Rt>, <Rt2>, [<Rn>] ; A1
5812888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        strexd(condition,
5812988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
5813088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
5813188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt + 1),
5813288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn), Offset));
5813388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1a00f90)) {
5813488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5813588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5813688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5813788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
581384339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5813988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5814088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5814188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5814288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5814388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5814488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200020: {
5814588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x012000b0
5814688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5814788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5814888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5814988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5815088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5815188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5815288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5815388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5815488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5815588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = PreIndex;
5815688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // STRH{<c>}{<q>} <Rt>, [<Rn>, #{+/-}<Rm>]! ; A1
5815788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    strh(condition,
5815888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5815988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5816088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5816188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5816288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5816388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    addrmode));
5816488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x12000b0)) {
5816588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5816688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5816788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5816888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5816988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200040: {
5817088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x012000d0
5817188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5817288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5817388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5817488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5817588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5817688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5817788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5817888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5817988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5818088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = PreIndex;
5818188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>, #{+/-}<Rm>]! ; A1
5818288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrd(condition,
5818388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5818488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt + 1),
5818588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5818688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5818788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5818888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    addrmode));
5818988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x12000d0)) {
5819088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5819188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5819288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5819388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5819488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200060: {
5819588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x012000f0
5819688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5819788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5819888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5819988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5820088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5820188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
5820288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5820388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
5820488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5820588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = PreIndex;
5820688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>, #{+/-}<Rm>]! ; A1
5820788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    strd(condition,
5820888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
5820988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt + 1),
5821088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
5821188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
5821288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
5821388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    addrmode));
5821488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x12000f0)) {
5821588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5821688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5821788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5821888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
582194339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
5822088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
5822188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5822288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5822388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5822488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5822588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
5822688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00400010
5822788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01a00000) {
5822888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5822988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00400010
5823088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5823188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5823288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5823388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5823488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5823588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5823688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5823788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5823888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5823988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5824088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SUB{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5824188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sub(condition,
5824288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5824388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5824488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5824588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5824688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5824788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5824888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
5824988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00600010
5825088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5825188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5825288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5825388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5825488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5825588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5825688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5825788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5825888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5825988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5826088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RSB{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5826188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rsb(condition,
5826288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5826388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5826488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5826588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5826688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5826788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5826888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800000: {
5826988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00c00010
5827088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5827188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5827288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5827388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5827488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5827588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5827688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5827788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5827888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5827988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5828088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SBC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5828188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sbc(condition,
5828288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5828388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5828488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5828588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5828688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5828788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5828888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00a00000: {
5828988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00e00010
5829088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5829188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5829288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5829388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5829488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5829588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5829688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5829788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5829888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5829988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5830088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RSC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5830188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rsc(condition,
5830288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5830388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5830488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5830588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5830688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5830788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
5830888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01400010
5830988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000060) {
5831088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000040: {
5831188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01400050
5831288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5831388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5831488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5831588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5831688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5831788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5831888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5831988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5832088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // QDADD{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; A1
5832188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        qdadd(condition,
5832288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
5832388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm),
5832488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn));
5832588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1400050)) {
5832688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5832788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5832888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5832988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5833088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5833188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01400070
5833288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5833388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5833488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5833588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5833688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = (instr & 0xf) | ((instr >> 4) & 0xfff0);
5833788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // HVC{<q>} {#}<imm16> ; A1
5833888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        hvc(al, imm);
5833988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5834088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
583414339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5834288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5834388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5834488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5834588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5834688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5834788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
5834888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01600010
5834988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000060) {
5835088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5835188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01600010
5835288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5835388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5835488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5835588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5835688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5835788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5835888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5835988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // CLZ{<c>}{<q>} <Rd>, <Rm> ; A1
5836088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        clz(condition, Register(rd), Register(rm));
5836188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff0ff0) != 0x16f0f10)) {
5836288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5836388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5836488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5836588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5836688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000040: {
5836788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01600050
5836888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5836988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5837088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5837188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5837288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5837388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5837488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5837588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5837688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // QDSUB{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; A1
5837788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        qdsub(condition,
5837888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
5837988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm),
5838088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn));
5838188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00ff0) != 0x1600050)) {
5838288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5838388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5838488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5838588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5838688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5838788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01600070
5838888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5838988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5839088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5839188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5839288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("SMC", instr);
5839388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5839488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
583954339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5839688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5839788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5839888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5839988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5840088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5840188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01800000: {
5840288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01c00010
5840388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5840488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5840588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5840688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5840788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5840888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5840988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5841088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5841188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5841288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5841388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // BIC{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5841488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bic(condition,
5841588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5841688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5841788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5841888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5841988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5842088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5842188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01a00000: {
5842288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01e00010
5842388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5842488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5842588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5842688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5842788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5842888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5842988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5843088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5843188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5843288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MVN{<c>}{<q>} <Rd>, <Rm>, <shift> <Rs> ; A1
5843388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mvn(condition,
5843488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5843588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rd),
5843688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5843788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0090) != 0x1e00010)) {
5843888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5843988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5844088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5844188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5844288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5844388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5844488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5844588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400080: {
5844688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00400090
5844788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000060) {
5844888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5844988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00400090
5845088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x01a00000) {
5845188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5845288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00400090
5845388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5845488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5845588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5845688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5845788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5845888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5845988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5846088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5846188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5846288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // UMAAL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5846388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        umaal(condition,
5846488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
5846588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
5846688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
5846788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
5846888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5846988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5847088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200000: {
5847188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00600090
5847288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5847388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5847488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5847588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5847688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5847788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
5847888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5847988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5848088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
5848188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MLS{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
5848288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mls(condition,
5848388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
5848488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
5848588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm),
5848688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(ra));
5848788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5848888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5848988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
5849088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00c00090
5849188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5849288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5849388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5849488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5849588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5849688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5849788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5849888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5849988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5850088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMULL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5850188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smull(condition,
5850288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
5850388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
5850488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
5850588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
5850688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5850788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5850888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00a00000: {
5850988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00e00090
5851088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5851188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5851288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5851388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5851488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5851588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
5851688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
5851788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
5851888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
5851988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLAL{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
5852088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlal(condition,
5852188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdlo),
5852288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rdhi),
5852388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
5852488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
5852588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5852688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5852788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01800000: {
5852888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01c00090
5852988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000300) {
5853088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
5853188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01c00090
5853288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
5853388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5853488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5853588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5853688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5853788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = instr & 0xf;
5853888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5853988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STLB{<c>}{<q>} <Rt>, [<Rn>] ; A1
5854088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            stlb(condition,
5854188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
5854288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn), Offset));
5854388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff0fff0) != 0x1c0fc90)) {
5854488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
5854588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5854688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5854788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5854888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
5854988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01c00290
5855088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
5855188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5855288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5855388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5855488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5855588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5855688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = instr & 0xf;
5855788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5855888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STLEXB{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; A1
5855988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            stlexb(condition,
5856088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
5856188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
5856288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn), Offset));
5856388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00ff0) != 0x1c00e90)) {
5856488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
5856588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5856688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5856788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5856888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
5856988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01c00390
5857088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
5857188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5857288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5857388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5857488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5857588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5857688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = instr & 0xf;
5857788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5857888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STREXB{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; A1
5857988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            strexb(condition,
5858088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
5858188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
5858288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn), Offset));
5858388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00ff0) != 0x1c00f90)) {
5858488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
5858588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5858688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5858788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
585884339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
5858988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
5859088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5859188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5859288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5859388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5859488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01a00000: {
5859588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01e00090
5859688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000300) {
5859788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
5859888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01e00090
5859988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
5860088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5860188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5860288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5860388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5860488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = instr & 0xf;
5860588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5860688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STLH{<c>}{<q>} <Rt>, [<Rn>] ; A1
5860788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            stlh(condition,
5860888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
5860988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn), Offset));
5861088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff0fff0) != 0x1e0fc90)) {
5861188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
5861288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5861388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5861488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5861588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
5861688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01e00290
5861788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
5861888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5861988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5862088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5862188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5862288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5862388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = instr & 0xf;
5862488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5862588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STLEXH{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; A1
5862688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            stlexh(condition,
5862788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
5862888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
5862988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn), Offset));
5863088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00ff0) != 0x1e00e90)) {
5863188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
5863288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5863388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5863488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5863588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
5863688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01e00390
5863788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
5863888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5863988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5864088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5864188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5864288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = (instr >> 12) & 0xf;
5864388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = instr & 0xf;
5864488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5864588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // STREXH{<c>}{<q>} <Rd>, <Rt>, [<Rn>] ; A1
5864688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            strexh(condition,
5864788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rd),
5864888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
5864988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn), Offset));
5865088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00ff0) != 0x1e00f90)) {
5865188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
5865288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5865388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5865488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
586554339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
5865688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
5865788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5865888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5865988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5866088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
586614339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5866288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5866388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5866488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5866588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5866688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5866788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000020: {
5866888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x004000b0
5866988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x01200000) {
5867088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5867188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x004000b0
5867288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5867388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5867488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5867588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5867688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5867788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
5867888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5867988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5868088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = (instr & 0xf) | ((instr >> 4) & 0xf0);
5868188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // STRH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_3> ; A1
5868288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        strh(condition,
5868388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5868488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt),
5868588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             MemOperand(Register(rn), sign, offset, PostIndex));
5868688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5868788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5868888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200000: {
5868988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x006000b0
5869088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5869188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5869288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5869388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5869488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("STRHT", instr);
5869588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5869688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5869788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01000000: {
5869888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x014000b0
5869988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5870088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5870188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5870288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5870388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5870488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
5870588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5870688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5870788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = (instr & 0xf) | ((instr >> 4) & 0xf0);
5870888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // STRH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}] ; A1
5870988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        strh(condition,
5871088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5871188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt),
5871288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             MemOperand(Register(rn), sign, offset, Offset));
5871388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5871488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5871588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01200000: {
5871688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x016000b0
5871788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5871888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5871988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5872088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5872188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5872288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
5872388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5872488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5872588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = (instr & 0xf) | ((instr >> 4) & 0xf0);
5872688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // STRH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}]! ; A1
5872788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        strh(condition,
5872888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5872988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt),
5873088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             MemOperand(Register(rn), sign, offset, PreIndex));
5873188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5873288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5873388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5873488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5873588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5873688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000040: {
5873788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x004000d0
5873888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
5873988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
5874088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x004f00d0
5874188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5874288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5874388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5874488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5874588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5874688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
5874788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t U = (instr >> 23) & 0x1;
5874888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
5874988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (U == 0) imm = -imm;
5875088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        bool minus_zero = (imm == 0) && (U == 0);
5875188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Label label(imm, kA32PcDelta, minus_zero);
5875288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // LDRD{<c>}{<q>} <Rt>, <Rt2>, <label> ; A1
5875388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ldrd(condition, Register(rt), Register(rt + 1), &label);
5875488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf7f00f0) != 0x14f00d0)) {
5875588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
5875688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5875788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5875888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5875988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5876088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x01200000) {
5876188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
5876288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x004000d0
5876388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5876488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
5876588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5876688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5876788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5876888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5876988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
5877088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5877188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
5877288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
5877388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
5877488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
58775d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>], #{+/-}<imm_1> ; A1 NOLINT(whitespace/line_length)
5877688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrd(condition,
5877788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
5877888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt + 1),
5877988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
5878088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
5878188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
5878288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            PostIndex));
5878388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5878488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5878588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x01000000: {
5878688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x014000d0
5878788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5878888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
5878988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5879088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5879188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5879288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5879388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
5879488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5879588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
5879688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
5879788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
5879888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
58799d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>{, #{+/-}<imm_1>}] ; A1 NOLINT(whitespace/line_length)
5880088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrd(condition,
5880188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
5880288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt + 1),
5880388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
5880488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
5880588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
5880688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Offset));
5880788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5880888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
5880988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x01200000: {
5881088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x016000d0
5881188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
5881288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
5881388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
5881488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
5881588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
5881688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
5881788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
5881888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
5881988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
5882088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
5882188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
5882288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
58823d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // LDRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>{, #{+/-}<imm_1>}]! ; A1 NOLINT(whitespace/line_length)
5882488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrd(condition,
5882588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
5882688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt + 1),
5882788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
5882888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
5882988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
5883088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            PreIndex));
5883188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5883288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
588334339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
5883488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
5883588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
5883688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5883788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5883888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5883988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5884088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5884188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5884288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5884388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x004000f0
5884488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x01200000) {
5884588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
5884688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x004000f0
5884788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5884888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5884988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5885088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5885188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5885288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
5885388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5885488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5885588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = (instr & 0xf) | ((instr >> 4) & 0xf0);
58856d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>], #{+/-}<imm_1> ; A1 NOLINT(whitespace/line_length)
5885788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        strd(condition,
5885888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt),
5885988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt + 1),
5886088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             MemOperand(Register(rn), sign, offset, PostIndex));
5886188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5886288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5886388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01000000: {
5886488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x014000f0
5886588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5886688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5886788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5886888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5886988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5887088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
5887188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5887288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5887388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = (instr & 0xf) | ((instr >> 4) & 0xf0);
58874d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>{, #{+/-}<imm_1>}] ; A1 NOLINT(whitespace/line_length)
5887588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        strd(condition,
5887688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt),
5887788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt + 1),
5887888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             MemOperand(Register(rn), sign, offset, Offset));
5887988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5888088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5888188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01200000: {
5888288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x016000f0
5888388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5888488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5888588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5888688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5888788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5888888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
5888988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5889088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
5889188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = (instr & 0xf) | ((instr >> 4) & 0xf0);
58892d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // STRD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>{, #{+/-}<imm_1>}]! ; A1 NOLINT(whitespace/line_length)
5889388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        strd(condition,
5889488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt),
5889588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rt + 1),
5889688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             MemOperand(Register(rn), sign, offset, PreIndex));
5889788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5889888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
588994339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
5890088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
5890188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5890288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5890388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5890488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5890588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5890688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5890788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5890888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5890988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5891088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5891188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100000: {
5891288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x00100000
5891388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x01e00000) {
5891488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
5891588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00100000
5891688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5891788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5891888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00100060
5891988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5892088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5892188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5892288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5892388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5892488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5892588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5892688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5892788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ANDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5892888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ands(condition,
5892988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5893088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5893188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5893288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5893388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5893488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5893588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5893688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5893788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5893888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5893988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5894088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5894188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5894288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5894388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5894488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5894588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5894688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
58947d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // ANDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5894888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ands(condition,
5894988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5895088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5895188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5895288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5895388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5895488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5895588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5895688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5895788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5895888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5895988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5896088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00200000: {
5896188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00300000
5896288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5896388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5896488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00300060
5896588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5896688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5896788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5896888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5896988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5897088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5897188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5897288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5897388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // EORS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5897488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    eors(condition,
5897588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5897688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5897788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5897888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5897988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5898088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5898188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5898288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5898388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5898488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5898588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5898688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5898788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5898888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5898988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5899088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5899188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5899288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
58993d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // EORS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5899488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    eors(condition,
5899588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5899688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5899788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5899888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5899988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5900088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5900188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5900288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5900388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5900488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5900588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5900688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
5900788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00500000
5900888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
5900988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000d0000: {
5901088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x005d0000
5901188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5901288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5901388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x005d0060
5901488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5901588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5901688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5901788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5901888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5901988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5902088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5902188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SUBS{<c>}{<q>} {<Rd>}, SP, <Rm>, RRX ; A1
5902288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        subs(condition,
5902388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5902488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5902588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             sp,
5902688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), RRX));
5902788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5902888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5902988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5903088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5903188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5903288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5903388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5903488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5903588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5903688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5903788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5903888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5903988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5904088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
59041d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // SUBS{<c>}{<q>} {<Rd>}, SP, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5904288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        subs(condition,
5904388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5904488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5904588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             sp,
5904688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm),
5904788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetType(),
5904888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetAmount()));
5904988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5905088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5905188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5905288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5905388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5905488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5905588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5905688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5905788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00500060
5905888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5905988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xd0000)) {
5906088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5906188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5906288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5906388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5906488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5906588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5906688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5906788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SUBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5906888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        subs(condition,
5906988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5907088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5907188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
5907288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), RRX));
5907388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5907488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5907588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5907688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5907788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xd0000) ||
5907888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5907988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5908088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5908188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5908288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5908388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5908488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5908588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5908688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5908788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5908888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
59089d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // SUBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5909088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        subs(condition,
5909188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5909288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5909388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
5909488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm),
5909588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetType(),
5909688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetAmount()));
5909788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5909888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5909988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5910088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5910188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5910288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5910388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5910488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5910588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00600000: {
5910688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00700000
5910788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5910888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5910988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00700060
5911088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5911188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5911288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5911388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5911488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5911588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5911688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5911788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5911888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RSBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5911988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rsbs(condition,
5912088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5912188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5912288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5912388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5912488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5912588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5912688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5912788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5912888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5912988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5913088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5913188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5913288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5913388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5913488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5913588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5913688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5913788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
59138d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // RSBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5913988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rsbs(condition,
5914088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5914188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5914288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5914388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5914488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5914588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5914688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5914788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5914888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5914988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5915088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5915188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
5915288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00900000
5915388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
5915488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000d0000: {
5915588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x009d0000
5915688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5915788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5915888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x009d0060
5915988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
5916088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5916188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5916288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5916388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5916488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5916588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5916688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ADDS{<c>}{<q>} {<Rd>}, SP, <Rm>, RRX ; A1
5916788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        adds(condition,
5916888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5916988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5917088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             sp,
5917188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), RRX));
5917288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5917388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5917488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5917588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5917688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5917788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5917888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5917988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5918088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5918188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5918288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5918388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5918488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5918588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
59186d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // ADDS{<c>}{<q>} {<Rd>}, SP, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5918788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        adds(condition,
5918888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5918988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5919088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             sp,
5919188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm),
5919288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetType(),
5919388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetAmount()));
5919488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5919588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5919688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5919788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5919888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5919988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5920088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000fe0) {
5920188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000060: {
5920288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00900060
5920388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5920488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xd0000)) {
5920588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5920688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5920788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5920888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5920988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5921088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5921188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5921288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ADDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5921388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        adds(condition,
5921488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5921588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5921688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
5921788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), RRX));
5921888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5921988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5922088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
5922188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
5922288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xd0000) ||
5922388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xfe0) == 0x60)) {
5922488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
5922588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
5922688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
5922788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
5922888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
5922988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
5923088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
5923188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5923288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            (instr >> 7) &
5923388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                0x1f);
59234d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // ADDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5923588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        adds(condition,
5923688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
5923788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
5923888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
5923988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm),
5924088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetType(),
5924188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     shift_operand.GetAmount()));
5924288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
5924388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5924488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5924588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5924688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5924788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5924888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5924988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5925088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00a00000: {
5925188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00b00000
5925288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5925388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5925488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00b00060
5925588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5925688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5925788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5925888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5925988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5926088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5926188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5926288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5926388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5926488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    adcs(condition,
5926588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5926688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5926788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5926888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5926988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5927088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5927188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5927288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5927388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5927488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5927588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5927688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5927788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5927888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5927988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5928088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5928188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5928288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
59283d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // ADCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5928488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    adcs(condition,
5928588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5928688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5928788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5928888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5928988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5929088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5929188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5929288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5929388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5929488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5929588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5929688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00c00000: {
5929788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00d00000
5929888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5929988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5930088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00d00060
5930188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5930288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5930388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5930488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5930588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5930688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5930788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5930888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5930988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SBCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5931088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sbcs(condition,
5931188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5931288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5931388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5931488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5931588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5931688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5931788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5931888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5931988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5932088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5932188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5932288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5932388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5932488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5932588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5932688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5932788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5932888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
59329d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // SBCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5933088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sbcs(condition,
5933188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5933288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5933388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5933488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5933588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5933688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5933788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5933888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5933988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5934088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5934188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5934288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00e00000: {
5934388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00f00000
5934488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5934588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5934688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00f00060
5934788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5934888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5934988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5935088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5935188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5935288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5935388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5935488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5935588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RSCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5935688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rscs(condition,
5935788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5935888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5935988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5936088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5936188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5936288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5936388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5936488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5936588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5936688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5936788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5936888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5936988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5937088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5937188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5937288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5937388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
59374d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // RSCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5937588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rscs(condition,
5937688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5937788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5937888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5937988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5938088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5938188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5938288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5938388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5938488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5938588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5938688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01000000: {
5938788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01100000
5938888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5938988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5939088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01100060
5939188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5939288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5939388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5939488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5939588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5939688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5939788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5939888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // TST{<c>}{<q>} <Rn>, <Rm>, RRX ; A1
5939988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    tst(condition,
5940088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5940188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5940288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), RRX));
5940388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0fff0) != 0x1100060)) {
5940488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5940588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5940688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5940788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5940888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5940988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5941088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5941188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5941288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5941388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5941488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5941588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5941688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5941788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5941888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
5941988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // TST{<c>}{<q>} <Rn>, <Rm> {, <shift> #<amount> } ; A1
5942088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    tst(condition,
5942188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5942288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5942388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm),
5942488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift_operand.GetType(),
5942588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift_operand.GetAmount()));
5942688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0f010) != 0x1100000)) {
5942788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5942888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5942988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5943088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5943188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5943288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5943388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5943488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01200000: {
5943588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01300000
5943688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5943788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5943888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01300060
5943988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5944088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5944188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5944288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5944388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5944488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5944588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5944688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // TEQ{<c>}{<q>} <Rn>, <Rm>, RRX ; A1
5944788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    teq(condition, Register(rn), Operand(Register(rm), RRX));
5944888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0fff0) != 0x1300060)) {
5944988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5945088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5945188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5945288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5945388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5945488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5945588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5945688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5945788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5945888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5945988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5946088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5946188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5946288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5946388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
5946488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // TEQ{<c>}{<q>} <Rn>, <Rm> {, <shift> #<amount> } ; A1
5946588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    teq(condition,
5946688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5946788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm),
5946888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift_operand.GetType(),
5946988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift_operand.GetAmount()));
5947088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0f010) != 0x1300000)) {
5947188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5947288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5947388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5947488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5947588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5947688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5947788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5947888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01400000: {
5947988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01500000
5948088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5948188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5948288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01500060
5948388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5948488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5948588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5948688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5948788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5948888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5948988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5949088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // CMP{<c>}{<q>} <Rn>, <Rm>, RRX ; A1
5949188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    cmp(condition,
5949288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5949388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5949488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), RRX));
5949588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0fff0) != 0x1500060)) {
5949688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5949788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5949888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5949988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5950088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5950188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5950288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5950388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5950488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5950588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5950688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5950788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5950888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5950988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5951088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
5951188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // CMP{<c>}{<q>} <Rn>, <Rm> {, <shift> #<amount> } ; A1
5951288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    cmp(condition,
5951388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5951488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5951588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm),
5951688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift_operand.GetType(),
5951788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift_operand.GetAmount()));
5951888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0f010) != 0x1500000)) {
5951988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5952088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5952188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5952288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5952388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5952488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5952588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5952688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01600000: {
5952788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01700000
5952888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5952988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5953088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01700060
5953188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5953288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5953388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5953488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5953588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5953688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5953788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5953888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // CMN{<c>}{<q>} <Rn>, <Rm>, RRX ; A1
5953988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    cmn(condition,
5954088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5954188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5954288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), RRX));
5954388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0fff0) != 0x1700060)) {
5954488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5954588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5954688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5954788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5954888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5954988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5955088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5955188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5955288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5955388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5955488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5955588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5955688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5955788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5955888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
5955988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // CMN{<c>}{<q>} <Rn>, <Rm> {, <shift> #<amount> } ; A1
5956088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    cmn(condition,
5956188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5956288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5956388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm),
5956488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift_operand.GetType(),
5956588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift_operand.GetAmount()));
5956688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0f010) != 0x1700000)) {
5956788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5956888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5956988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5957088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5957188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5957288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5957388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5957488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01800000: {
5957588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01900000
5957688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5957788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5957888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01900060
5957988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5958088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5958188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5958288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5958388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5958488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5958588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5958688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5958788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ORRS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5958888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    orrs(condition,
5958988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5959088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5959188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5959288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5959388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5959488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5959588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5959688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5959788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5959888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5959988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5960088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5960188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5960288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5960388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5960488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5960588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5960688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
59607d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // ORRS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5960888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    orrs(condition,
5960988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5961088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5961188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5961288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5961388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5961488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5961588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5961688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5961788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5961888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5961988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5962088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01a00000: {
5962188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01b00000
5962288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5962388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5962488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01b00060
5962588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5962688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5962788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5962888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5962988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) != 0xf0000000)) {
5963088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5963188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5963288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5963388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // RRXS{<c>}{<q>} {<Rd>}, <Rm> ; A1
5963488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      rrxs(condition, Register(rd), Register(rm));
5963588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff0ff0) != 0x1b00060)) {
5963688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5963788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5963888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5963988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5964088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5964188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5964288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5964388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOVS{<c>}{<q>} <Rd>, <Rm>, RRX ; A1
5964488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    movs(condition,
5964588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5964688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5964788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5964888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0ff0) != 0x1b00060)) {
5964988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5965088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5965188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5965288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5965388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5965488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5965588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5965688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5965788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5965888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5965988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x2)) &&
5966088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
5966188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5966288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5966388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5966488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t amount = (instr >> 7) & 0x1f;
5966588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (amount == 0) amount = 32;
5966688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // ASRS{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; A1
5966788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      asrs(condition, Best, Register(rd), Register(rm), amount);
5966888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff0070) != 0x1b00040)) {
5966988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5967088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5967188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5967288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5967388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x0)) &&
5967488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000) &&
5967588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0x00000f80) != 0x00000000)) {
5967688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5967788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5967888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5967988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t amount = (instr >> 7) & 0x1f;
5968088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // LSLS{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; A1
5968188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      lsls(condition, Best, Register(rd), Register(rm), amount);
5968288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff0070) != 0x1b00000)) {
5968388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5968488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5968588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5968688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5968788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x1)) &&
5968888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
5968988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5969088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5969188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5969288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t amount = (instr >> 7) & 0x1f;
5969388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (amount == 0) amount = 32;
5969488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // LSRS{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; A1
5969588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      lsrs(condition, Best, Register(rd), Register(rm), amount);
5969688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff0070) != 0x1b00020)) {
5969788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5969888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5969988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5970088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5970188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x3)) &&
5970288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000) &&
5970388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0x00000f80) != 0x00000000)) {
5970488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5970588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5970688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5970788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      uint32_t amount = (instr >> 7) & 0x1f;
5970888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // RORS{<c>}{<q>} {<Rd>}, <Rm>, #<imm> ; A1
5970988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      rors(condition, Best, Register(rd), Register(rm), amount);
5971088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff0070) != 0x1b00060)) {
5971188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5971288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
5971388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5971488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5971588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5971688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5971788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5971888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5971988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
5972088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOVS{<c>}{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; A1
5972188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    movs(condition,
5972288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5972388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5972488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5972588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5972688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5972788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0010) != 0x1b00000)) {
5972888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5972988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5973088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5973188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5973288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5973388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5973488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5973588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01c00000: {
5973688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01d00000
5973788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5973888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5973988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01d00060
5974088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5974188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5974288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5974388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5974488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5974588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5974688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5974788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5974888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // BICS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, RRX ; A1
5974988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bics(condition,
5975088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5975188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5975288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5975388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5975488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5975588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5975688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5975788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5975888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5975988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5976088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5976188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5976288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5976388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5976488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5976588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5976688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5976788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
59768d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // BICS{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, <shift> #<amount> } ; A1 NOLINT(whitespace/line_length)
5976988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bics(condition,
5977088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5977188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5977288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5977388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5977488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5977588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5977688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5977788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5977888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5977988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5978088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5978188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01e00000: {
5978288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x01f00000
5978388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000fe0) {
5978488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
5978588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01f00060
5978688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5978788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5978888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5978988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5979088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5979188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5979288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5979388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MVNS{<c>}{<q>} <Rd>, <Rm>, RRX ; A1
5979488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mvns(condition,
5979588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5979688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5979788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), RRX));
5979888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0ff0) != 0x1f00060)) {
5979988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5980088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5980188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5980288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5980388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
5980488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
5980588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xfe0) == 0x60)) {
5980688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5980788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5980888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5980988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5981088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5981188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5981288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ImmediateShiftOperand shift_operand((instr >> 5) & 0x3,
5981388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        (instr >> 7) & 0x1f);
5981488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MVNS{<c>}{<q>} <Rd>, <Rm> {, <shift> #<amount> } ; A1
5981588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mvns(condition,
5981688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5981788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5981888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm),
5981988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetType(),
5982088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 shift_operand.GetAmount()));
5982188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0010) != 0x1f00000)) {
5982288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5982388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5982488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5982588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5982688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
5982788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
5982888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
5982988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
5983088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
5983188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
5983288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100010: {
5983388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x00100010
5983488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400080) {
5983588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
5983688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00100010
5983788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01a00000) {
5983888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
5983988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00100010
5984088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5984188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5984288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5984388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5984488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5984588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5984688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5984788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5984888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5984988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5985088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ANDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5985188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ands(condition,
5985288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5985388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5985488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5985588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
5985688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5985788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5985888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
5985988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00300010
5986088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5986188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5986288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5986388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5986488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5986588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5986688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5986788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5986888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5986988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5987088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // EORS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5987188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    eors(condition,
5987288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5987388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5987488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5987588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
5987688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5987788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5987888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800000: {
5987988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00900010
5988088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5988188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5988288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5988388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5988488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5988588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5988688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5988788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5988888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5988988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5989088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADDS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5989188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    adds(condition,
5989288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5989388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5989488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5989588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
5989688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5989788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5989888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00a00000: {
5989988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00b00010
5990088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5990188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5990288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5990388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5990488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5990588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5990688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5990788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5990888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5990988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5991088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5991188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    adcs(condition,
5991288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5991388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5991488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5991588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
5991688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5991788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5991888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
5991988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01100010
5992088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5992188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5992288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5992388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5992488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5992588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5992688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5992788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5992888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5992988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // TST{<c>}{<q>} <Rn>, <Rm>, <shift> <Rs> ; A1
5993088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    tst(condition,
5993188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
5993288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5993388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5993488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0f090) != 0x1100010)) {
5993588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5993688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5993788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5993888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5993988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
5994088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01300010
5994188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5994288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5994388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5994488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5994588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5994688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5994788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5994888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5994988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5995088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // TEQ{<c>}{<q>} <Rn>, <Rm>, <shift> <Rs> ; A1
5995188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    teq(condition,
5995288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
5995388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
5995488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0f090) != 0x1300010)) {
5995588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
5995688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5995788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5995888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5995988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01800000: {
5996088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01900010
5996188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5996288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5996388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5996488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5996588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
5996688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
5996788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
5996888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
5996988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
5997088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
5997188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ORRS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
5997288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    orrs(condition,
5997388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
5997488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
5997588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
5997688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
5997788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
5997888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
5997988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01a00000: {
5998088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01b00010
5998188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
5998288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
5998388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
5998488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
5998588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x2)) &&
5998688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
5998788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
5998888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
5998988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
5999088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rs = (instr >> 8) & 0xf;
5999188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // ASRS{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; A1
5999288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      asrs(condition,
5999388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Best,
5999488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
5999588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
5999688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rs));
5999788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff00f0) != 0x1b00050)) {
5999888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
5999988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6000088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6000188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6000288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x0)) &&
6000388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
6000488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6000588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
6000688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
6000788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rs = (instr >> 8) & 0xf;
6000888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // LSLS{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; A1
6000988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      lsls(condition,
6001088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Best,
6001188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
6001288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
6001388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rs));
6001488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff00f0) != 0x1b00010)) {
6001588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
6001688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6001788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6001888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6001988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x1)) &&
6002088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
6002188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6002288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
6002388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
6002488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rs = (instr >> 8) & 0xf;
6002588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // LSRS{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; A1
6002688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      lsrs(condition,
6002788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Best,
6002888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
6002988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
6003088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rs));
6003188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff00f0) != 0x1b00030)) {
6003288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
6003388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6003488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6003588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6003688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 5)) & Uint32(0x3)) == Uint32(0x3)) &&
6003788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
6003888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6003988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rd = (instr >> 12) & 0xf;
6004088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = instr & 0xf;
6004188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rs = (instr >> 8) & 0xf;
6004288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // RORS{<c>}{<q>} {<Rd>}, <Rm>, <Rs> ; A1
6004388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      rors(condition,
6004488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Best,
6004588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
6004688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
6004788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rs));
6004888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xfff00f0) != 0x1b00070)) {
6004988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
6005088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6005188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6005288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6005388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6005488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6005588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6005688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6005788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6005888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MOVS{<c>}{<q>} <Rd>, <Rm>, <shift> <Rs> ; A1
6005988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    movs(condition,
6006088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6006188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
6006288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
6006388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0090) != 0x1b00010)) {
6006488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6006588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6006688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6006788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6006888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6006988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6007088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6007188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000080: {
6007288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00100090
6007388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01200060) {
6007488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6007588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00100090
6007688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800000) {
6007788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6007888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00100090
6007988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6008088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6008188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6008288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6008388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6008488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
6008588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6008688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6008788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MULS{<c>}{<q>} <Rd>, <Rn>, {<Rm>} ; A1
6008888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        muls(condition,
6008988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
6009088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
6009188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm));
6009288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff0f0f0) != 0x100090)) {
6009388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6009488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6009588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6009688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6009788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
6009888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00900090
6009988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6010088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6010188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6010288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6010388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6010488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
6010588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
6010688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6010788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6010888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // UMULLS{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
6010988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        umulls(condition,
6011088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rdlo),
6011188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rdhi),
6011288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
6011388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
6011488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6011588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6011688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6011788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6011888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6011988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000020: {
6012088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x001000b0
6012188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6012288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6012388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6012488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6012588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6012688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6012788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6012888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6012988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6013088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<Rm> ; A1
6013188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrh(condition,
6013288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6013388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
6013488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
6013588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
6013688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
6013788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    PostIndex));
6013888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x1000b0)) {
6013988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6014088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6014188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6014288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6014388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000040: {
6014488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x001000d0
6014588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6014688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6014788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6014888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6014988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6015088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6015188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6015288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6015388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6015488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRSB{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<Rm> ; A1
6015588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrsb(condition,
6015688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
6015788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rt),
6015888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          MemOperand(Register(rn),
6015988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     sign,
6016088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm),
6016188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     PostIndex));
6016288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x1000d0)) {
6016388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6016488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6016588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6016688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6016788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
6016888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x001000f0
6016988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6017088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6017188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6017288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6017388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6017488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6017588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6017688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6017788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6017888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRSH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<Rm> ; A1
6017988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrsh(condition,
6018088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
6018188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rt),
6018288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          MemOperand(Register(rn),
6018388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     sign,
6018488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm),
6018588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     PostIndex));
6018688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x1000f0)) {
6018788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6018888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6018988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6019088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6019188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
6019288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00300090
6019388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800000) {
6019488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6019588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00300090
6019688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6019788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6019888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6019988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6020088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6020188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
6020288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6020388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6020488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
6020588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // MLAS{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6020688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        mlas(condition,
6020788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
6020888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
6020988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rm),
6021088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(ra));
6021188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6021288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6021388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
6021488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00b00090
6021588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6021688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6021788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6021888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6021988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6022088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
6022188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
6022288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6022388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6022488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // UMLALS{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
6022588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        umlals(condition,
6022688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rdlo),
6022788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rdhi),
6022888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
6022988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
6023088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6023188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6023288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6023388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6023488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6023588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200020: {
6023688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x003000b0
6023788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6023888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6023988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6024088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6024188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("LDRHT", instr);
6024288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6024388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6024488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200040: {
6024588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x003000d0
6024688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6024788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6024888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6024988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6025088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("LDRSBT", instr);
6025188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6025288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6025388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200060: {
6025488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x003000f0
6025588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6025688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6025788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6025888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6025988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("LDRSHT", instr);
6026088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6026188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6026288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
6026388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01100090
6026488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800300) {
6026588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
6026688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01900090
6026788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6026888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6026988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6027088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6027188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6027288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
6027388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6027488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // LDA{<c>}{<q>} <Rt>, [<Rn>] ; A1
6027588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        lda(condition,
6027688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rt),
6027788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            MemOperand(Register(rn), Offset));
6027888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00fff) != 0x1900c9f)) {
6027988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6028088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6028188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6028288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6028388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800200: {
6028488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01900290
6028588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6028688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6028788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6028888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6028988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6029088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
6029188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6029288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // LDAEX{<c>}{<q>} <Rt>, [<Rn>] ; A1
6029388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ldaex(condition,
6029488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rt),
6029588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              MemOperand(Register(rn), Offset));
6029688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00fff) != 0x1900e9f)) {
6029788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6029888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6029988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6030088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6030188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800300: {
6030288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01900390
6030388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6030488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6030588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6030688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6030788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6030888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
6030988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6031088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // LDREX{<c>}{<q>} <Rt>, [<Rn>{, #<imm_1>}] ; A1
6031188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ldrex(condition,
6031288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rt),
6031388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              MemOperand(Register(rn), plus, 0, Offset));
6031488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00fff) != 0x1900f9f)) {
6031588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6031688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6031788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6031888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
603194339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
6032088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6032188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6032288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6032388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6032488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6032588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000020: {
6032688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x011000b0
6032788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6032888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6032988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6033088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6033188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6033288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6033388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6033488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6033588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6033688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = Offset;
6033788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRH{<c>}{<q>} <Rt>, [<Rn>, #{+/-}<Rm>] ; A1
6033888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrh(condition,
6033988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6034088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
6034188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
6034288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
6034388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
6034488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    addrmode));
6034588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x11000b0)) {
6034688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6034788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6034888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6034988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6035088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000040: {
6035188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x011000d0
6035288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6035388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6035488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6035588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6035688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6035788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6035888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6035988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6036088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6036188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = Offset;
6036288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRSB{<c>}{<q>} <Rt>, [<Rn>, #{+/-}<Rm>] ; A1
6036388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrsb(condition,
6036488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
6036588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rt),
6036688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          MemOperand(Register(rn),
6036788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     sign,
6036888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm),
6036988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     addrmode));
6037088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x11000d0)) {
6037188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6037288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6037388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6037488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6037588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000060: {
6037688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x011000f0
6037788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6037888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6037988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6038088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6038188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6038288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6038388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6038488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6038588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6038688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = Offset;
6038788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRSH{<c>}{<q>} <Rt>, [<Rn>, #{+/-}<Rm>] ; A1
6038888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrsh(condition,
6038988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
6039088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rt),
6039188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          MemOperand(Register(rn),
6039288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     sign,
6039388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm),
6039488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     addrmode));
6039588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x11000f0)) {
6039688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6039788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6039888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6039988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6040088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
6040188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01300090
6040288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800300) {
6040388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800200: {
6040488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01b00290
6040588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6040688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6040788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6040888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6040988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6041088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
6041188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6041288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // LDAEXD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>] ; A1
6041388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ldaexd(condition,
6041488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
6041588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt + 1),
6041688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn), Offset));
6041788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00fff) != 0x1b00e9f)) {
6041888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6041988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6042088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6042188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6042288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800300: {
6042388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01b00390
6042488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6042588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6042688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6042788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6042888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6042988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rt = (instr >> 12) & 0xf;
6043088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6043188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // LDREXD{<c>}{<q>} <Rt>, <Rt2>, [<Rn>] ; A1
6043288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ldrexd(condition,
6043388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt),
6043488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rt + 1),
6043588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               MemOperand(Register(rn), Offset));
6043688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff00fff) != 0x1b00f9f)) {
6043788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6043888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6043988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6044088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
604414339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
6044288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6044388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6044488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6044588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6044688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6044788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200020: {
6044888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x013000b0
6044988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6045088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6045188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6045288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6045388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6045488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6045588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6045688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6045788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6045888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = PreIndex;
6045988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRH{<c>}{<q>} <Rt>, [<Rn>, #{+/-}<Rm>]! ; A1
6046088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrh(condition,
6046188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6046288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
6046388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn),
6046488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    sign,
6046588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rm),
6046688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    addrmode));
6046788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x13000b0)) {
6046888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6046988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6047088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6047188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6047288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200040: {
6047388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x013000d0
6047488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6047588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6047688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6047788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6047888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6047988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6048088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6048188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6048288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6048388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = PreIndex;
6048488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRSB{<c>}{<q>} <Rt>, [<Rn>, #{+/-}<Rm>]! ; A1
6048588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrsb(condition,
6048688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
6048788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rt),
6048888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          MemOperand(Register(rn),
6048988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     sign,
6049088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm),
6049188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     addrmode));
6049288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x13000d0)) {
6049388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6049488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6049588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6049688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6049788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200060: {
6049888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x013000f0
6049988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6050088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6050188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6050288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6050388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6050488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6050588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6050688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6050788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6050888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    AddrMode addrmode = PreIndex;
6050988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRSH{<c>}{<q>} <Rt>, [<Rn>, #{+/-}<Rm>]! ; A1
6051088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrsh(condition,
6051188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Best,
6051288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rt),
6051388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          MemOperand(Register(rn),
6051488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     sign,
6051588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rm),
6051688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     addrmode));
6051788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf700ff0) != 0x13000f0)) {
6051888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6051988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6052088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6052188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6052288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6052388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6052488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6052588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6052688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00500010
6052788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x01a00000) {
6052888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6052988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00500010
6053088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6053188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6053288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6053388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6053488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6053588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6053688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6053788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6053888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6053988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6054088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SUBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
6054188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    subs(condition,
6054288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6054388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
6054488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
6054588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
6054688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6054788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6054888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
6054988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00700010
6055088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6055188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6055288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6055388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6055488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6055588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6055688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6055788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6055888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6055988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6056088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RSBS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
6056188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rsbs(condition,
6056288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6056388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
6056488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
6056588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
6056688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6056788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6056888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800000: {
6056988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00d00010
6057088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6057188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6057288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6057388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6057488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6057588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6057688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6057788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6057888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6057988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6058088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SBCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
6058188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sbcs(condition,
6058288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6058388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
6058488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
6058588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
6058688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6058788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6058888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00a00000: {
6058988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00f00010
6059088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6059188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6059288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6059388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6059488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6059588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6059688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6059788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6059888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6059988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6060088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RSCS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
6060188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rscs(condition,
6060288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
6060388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
6060488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
6060588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6060688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6060788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01000000: {
6060888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01500010
6060988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6061088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6061188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6061288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6061388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6061488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6061588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6061688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6061788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6061888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // CMP{<c>}{<q>} <Rn>, <Rm>, <shift> <Rs> ; A1
6061988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    cmp(condition,
6062088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
6062188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
6062288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
6062388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0f090) != 0x1500010)) {
6062488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6062588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6062688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6062788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6062888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01200000: {
6062988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01700010
6063088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6063188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6063288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6063388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6063488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6063588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6063688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6063788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6063888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6063988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // CMN{<c>}{<q>} <Rn>, <Rm>, <shift> <Rs> ; A1
6064088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    cmn(condition,
6064188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
6064288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rn),
6064388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Operand(Register(rm), shift.GetType(), Register(rs)));
6064488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff0f090) != 0x1700010)) {
6064588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6064688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6064788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6064888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6064988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01800000: {
6065088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01d00010
6065188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6065288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6065388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6065488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6065588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6065688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6065788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6065888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6065988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6066088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6066188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // BICS{<c>}{<q>} {<Rd>}, <Rn>, <Rm>, <shift> <Rs> ; A1
6066288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bics(condition,
6066388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6066488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
6066588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
6066688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
6066788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6066888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6066988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x01a00000: {
6067088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x01f00010
6067188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6067288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6067388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6067488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6067588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6067688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6067788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6067888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Shift shift((instr >> 5) & 0x3);
6067988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rs = (instr >> 8) & 0xf;
6068088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // MVNS{<c>}{<q>} <Rd>, <Rm>, <shift> <Rs> ; A1
6068188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    mvns(condition,
6068288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6068388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rd),
6068488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Operand(Register(rm), shift.GetType(), Register(rs)));
6068588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0090) != 0x1f00010)) {
6068688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6068788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6068888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6068988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6069088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6069188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6069288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6069388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400080: {
6069488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x00500090
6069588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000060) {
6069688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6069788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x00500090
6069888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x01a00000) {
6069988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
6070088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00d00090
6070188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6070288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6070388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6070488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6070588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6070688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
6070788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
6070888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6070988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6071088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMULLS{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
6071188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smulls(condition,
6071288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rdlo),
6071388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rdhi),
6071488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
6071588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
6071688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6071788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6071888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00a00000: {
6071988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x00f00090
6072088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6072188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6072288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6072388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6072488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6072588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdlo = (instr >> 12) & 0xf;
6072688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rdhi = (instr >> 16) & 0xf;
6072788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6072888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6072988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMLALS{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
6073088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smlals(condition,
6073188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rdlo),
6073288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rdhi),
6073388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
6073488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
6073588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6073688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6073788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01800000: {
6073888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01d00090
6073988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000300) {
6074088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6074188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01d00090
6074288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6074388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6074488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6074588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6074688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6074788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6074888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6074988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDAB{<c>}{<q>} <Rt>, [<Rn>] ; A1
6075088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldab(condition,
6075188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
6075288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn), Offset));
6075388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00fff) != 0x1d00c9f)) {
6075488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6075588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6075688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6075788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6075888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
6075988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01d00290
6076088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6076188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6076288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6076388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6076488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6076588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6076688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6076788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDAEXB{<c>}{<q>} <Rt>, [<Rn>] ; A1
6076888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldaexb(condition,
6076988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
6077088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn), Offset));
6077188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00fff) != 0x1d00e9f)) {
6077288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6077388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6077488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6077588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6077688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
6077788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01d00390
6077888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6077988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6078088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6078188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6078288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6078388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6078488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6078588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDREXB{<c>}{<q>} <Rt>, [<Rn>] ; A1
6078688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrexb(condition,
6078788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
6078888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn), Offset));
6078988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00fff) != 0x1d00f9f)) {
6079088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6079188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6079288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6079388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
607944339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
6079588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
6079688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6079788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6079888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6079988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6080088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01a00000: {
6080188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x01f00090
6080288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000300) {
6080388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6080488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01f00090
6080588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6080688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6080788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6080888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6080988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6081088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6081188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6081288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDAH{<c>}{<q>} <Rt>, [<Rn>] ; A1
6081388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldah(condition,
6081488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
6081588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn), Offset));
6081688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00fff) != 0x1f00c9f)) {
6081788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6081888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6081988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6082088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6082188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000200: {
6082288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01f00290
6082388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6082488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6082588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6082688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6082788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6082888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6082988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6083088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDAEXH{<c>}{<q>} <Rt>, [<Rn>] ; A1
6083188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldaexh(condition,
6083288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
6083388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn), Offset));
6083488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00fff) != 0x1f00e9f)) {
6083588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6083688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6083788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6083888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6083988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000300: {
6084088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x01f00390
6084188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6084288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6084388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6084488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6084588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6084688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6084788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6084888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDREXH{<c>}{<q>} <Rt>, [<Rn>] ; A1
6084988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrexh(condition,
6085088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rt),
6085188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   MemOperand(Register(rn), Offset));
6085288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xff00fff) != 0x1f00f9f)) {
6085388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6085488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6085588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6085688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
608574339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                          default:
6085888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
6085988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6086088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6086188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6086288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
608634339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
6086488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6086588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6086688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6086788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6086888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6086988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000020: {
6087088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x005000b0
6087188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x01200000) {
6087288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6087388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x005000b0
6087488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6087588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6087688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x005f00b0
6087788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6087888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6087988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6088088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6088188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6088288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6088388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6088488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6088588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6088688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6088788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6088888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6088988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRH{<c>}{<q>} <Rt>, <label> ; A1
6089088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrh(condition, Register(rt), &label);
6089188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00b0)) {
6089288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6089388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6089488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6089588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6089688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6089788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6089888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6089988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6090088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6090188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6090288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6090388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6090488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6090588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6090688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6090788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6090888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
6090988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_3> ; A1
6091088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrh(condition,
6091188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
6091288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
6091388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
6091488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
6091588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
6091688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            PostIndex));
6091788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6091888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6091988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6092088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6092188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6092288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200000: {
6092388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x007000b0
6092488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6092588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6092688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6092788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6092888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("LDRHT", instr);
6092988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6093088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6093188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01000000: {
6093288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x015000b0
6093388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6093488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6093588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x015f00b0
6093688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6093788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6093888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6093988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6094088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6094188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6094288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6094388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6094488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6094588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6094688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6094788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6094888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRH{<c>}{<q>} <Rt>, <label> ; A1
6094988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrh(condition, Register(rt), &label);
6095088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00b0)) {
6095188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6095288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6095388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6095488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6095588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6095688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6095788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6095888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6095988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6096088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6096188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6096288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6096388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6096488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6096588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6096688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6096788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
6096888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}] ; A1
6096988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrh(condition,
6097088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
6097188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
6097288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
6097388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
6097488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
6097588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Offset));
6097688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6097788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6097888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6097988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6098088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6098188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01200000: {
6098288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x017000b0
6098388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6098488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6098588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x017f00b0
6098688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6098788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6098888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6098988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6099088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6099188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6099288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6099388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6099488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6099588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6099688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6099788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6099888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRH{<c>}{<q>} <Rt>, <label> ; A1
6099988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrh(condition, Register(rt), &label);
6100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00b0)) {
6100188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6100388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6100488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6100788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6100888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6100988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6101488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6101588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
61018d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // LDRH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}]! ; A1 NOLINT(whitespace/line_length)
6101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrh(condition,
6102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Best,
6102188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
6102288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
6102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
6102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
6102588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            PreIndex));
6102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6102888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6102988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6103088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6103188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6103288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6103388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6103488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000040: {
6103588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x005000d0
6103688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x01200000) {
6103788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6103888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x005000d0
6103988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6104088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6104188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x005f00d0
6104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6104688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6104788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6105388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6105488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRSB{<c>}{<q>} <Rt>, <label> ; A1
6105588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsb(condition, Register(rt), &label);
6105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00d0)) {
6105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6105988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6106088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6106188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6106488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6106688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6106788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6106888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6106988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6107088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6107188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6107288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6107388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
6107488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRSB{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_2> ; A1
6107588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsb(condition,
6107688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
6107788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
6107888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
6107988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             sign,
6108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             offset,
6108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             PostIndex));
6108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6108388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6108488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6108588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200000: {
6108888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x007000d0
6108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("LDRSBT", instr);
6109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6109588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6109688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01000000: {
6109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x015000d0
6109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6109988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6110088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x015f00d0
6110188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6110288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6110388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6110488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6110588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6110688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6110788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6110888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6110988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6111088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6111188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6111288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6111388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRSB{<c>}{<q>} <Rt>, <label> ; A1
6111488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsb(condition, Register(rt), &label);
6111588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00d0)) {
6111688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6111788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6111888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6111988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6112088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6112188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6112288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6112388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6112488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6112588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6112688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6112788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6112888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6113188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6113288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
61133d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // LDRSB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}] ; A1 NOLINT(whitespace/line_length)
6113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsb(condition,
6113588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
6113688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
6113788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
6113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             sign,
6113988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             offset,
6114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             Offset));
6114188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6114588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6114688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01200000: {
6114788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x017000d0
6114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6114988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6115088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x017f00d0
6115188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6115288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6115388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6115488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6115588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6115688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6115888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6115988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6116088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6116188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRSB{<c>}{<q>} <Rt>, <label> ; A1
6116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsb(condition, Register(rt), &label);
6116588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00d0)) {
6116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6116988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6117088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6117188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6117388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6117588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6117988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6118088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
61183d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // LDRSB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}]! ; A1 NOLINT(whitespace/line_length)
6118488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsb(condition,
6118588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
6118688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
6118788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
6118888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             sign,
6118988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             offset,
6119088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             PreIndex));
6119188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6119288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6119388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6119488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6119588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6119688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6119788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6119888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6119988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000060: {
6120088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x005000f0
6120188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x01200000) {
6120288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6120388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x005000f0
6120488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6120588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6120688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x005f00f0
6120788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6120888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6120988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6121088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6121188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6121288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6121388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6121488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6121588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6121688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6121788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6121888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6121988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRSH{<c>}{<q>} <Rt>, <label> ; A1
6122088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsh(condition, Register(rt), &label);
6122188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00f0)) {
6122288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6122388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6122488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6122588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6122688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6122788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6122888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6122988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6123088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6123188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6123288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6123388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6123488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6123588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6123688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6123788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6123888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
6123988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRSH{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_2> ; A1
6124088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsh(condition,
6124188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
6124288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
6124388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
6124488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             sign,
6124588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             offset,
6124688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             PostIndex));
6124788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6124888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6124988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6125088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6125188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6125288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200000: {
6125388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x007000f0
6125488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6125588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6125688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6125788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6125888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("LDRSHT", instr);
6125988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6126088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6126188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01000000: {
6126288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x015000f0
6126388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6126488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6126588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x015f00f0
6126688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6126788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6126888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6126988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6127088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6127188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6127288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6127388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6127488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6127588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6127688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6127788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6127888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRSH{<c>}{<q>} <Rt>, <label> ; A1
6127988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsh(condition, Register(rt), &label);
6128088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00f0)) {
6128188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6128288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6128388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6128488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6128588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6128688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6128788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6128888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6128988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6129088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6129188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6129288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6129388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6129488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6129588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6129688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6129788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
61298d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // LDRSH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}] ; A1 NOLINT(whitespace/line_length)
6129988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsh(condition,
6130088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
6130188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
6130288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
6130388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             sign,
6130488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             offset,
6130588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             Offset));
6130688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6130788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6130888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6130988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6131088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6131188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x01200000: {
6131288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x017000f0
6131388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6131488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6131588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x017f00f0
6131688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6131788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0x1200000) == 0x200000)) {
6131888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6131988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6132088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6132188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6132288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6132388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6132488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = (instr & 0xf) | ((instr >> 4) & 0xf0);
6132588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6132688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6132788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6132888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // LDRSH{<c>}{<q>} <Rt>, <label> ; A1
6132988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsh(condition, Register(rt), &label);
6133088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf7f00f0) != 0x15f00f0)) {
6133188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6133288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6133388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6133488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6133588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6133688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6133788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6133888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6133988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6134088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6134188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6134288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6134388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6134488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6134588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6134688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset =
6134788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (instr & 0xf) | ((instr >> 4) & 0xf0);
61348d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // LDRSH{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_2>}]! ; A1 NOLINT(whitespace/line_length)
6134988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ldrsh(condition,
6135088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Best,
6135188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  Register(rt),
6135288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  MemOperand(Register(rn),
6135388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             sign,
6135488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             offset,
6135588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                             PreIndex));
6135688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6135788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6135888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6135988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6136088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6136188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6136288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6136388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6136488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6136588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6136688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6136788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6136888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6136988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6137088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
6137188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
6137288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
6137388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x02000000: {
6137488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0x02000000
6137588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01b00000) {
6137688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
6137788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x02000000
6137888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6137988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6138088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02000000
6138188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6138288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6138388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6138488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6138588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6138688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6138788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6138888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6138988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // AND{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6139088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                and_(condition, Best, Register(rd), Register(rn), imm);
6139188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6139288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6139388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6139488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02400000
6139588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000d0000) {
6139688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000d0000: {
6139788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x024d0000
6139888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00020000) {
6139988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6140088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x024d0000
6140188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6140288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6140388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6140488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6140588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6140688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6140788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6140888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SUB{<c>}{<q>} {<Rd>}, SP, #<const> ; A1
6140988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sub(condition, Best, Register(rd), sp, imm);
6141088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6141188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6141288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00020000: {
6141388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x024f0000
6141488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6141588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6141688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6141788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6141888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) != 0xf0000000) &&
6141988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((Uint32(instr) & Uint32(0xfff)) == Uint32(0x0))) {
6142088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 28) & 0xf);
6142188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned rd = (instr >> 12) & 0xf;
6142288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6142388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // SUB{<c>}{<q>} <Rd>, PC, #<const> ; A2
6142488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          sub(condition, Best, Register(rd), pc, imm);
6142588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6142688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6142788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6142888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6142988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6143088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Label label(-imm, kA32PcDelta);
6143188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ADR{<c>}{<q>} <Rd>, <label> ; A2
6143288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        adr(condition, Best, Register(rd), &label);
6143388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6143488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6143588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6143688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6143788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6143888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6143988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6144088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xd0000) == 0xd0000)) {
6144188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6144288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6144388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6144488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6144588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6144688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6144788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6144888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SUB{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6144988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sub(condition, Best, Register(rd), Register(rn), imm);
6145088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6145188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6145288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6145388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6145488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6145588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6145688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6145788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6145888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100000: {
6145988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x02100000
6146088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6146188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6146288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02100000
6146388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6146488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6146588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6146688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6146788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6146888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6146988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6147088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6147188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ANDS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6147288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ands(condition, Best, Register(rd), Register(rn), imm);
6147388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6147488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6147588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6147688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02500000
6147788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6147888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000d0000: {
6147988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x025d0000
6148088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6148188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6148288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6148388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6148488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6148588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6148688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6148788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SUBS{<c>}{<q>} {<Rd>}, SP, #<const> ; A1
6148888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    subs(condition, Best, Register(rd), sp, imm);
6148988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6149088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6149188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6149288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6149388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xd0000)) {
6149488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6149588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6149688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6149788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6149888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6149988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6150088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6150188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SUBS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6150288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    subs(condition, Best, Register(rd), Register(rn), imm);
6150388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6150488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6150588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6150688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6150788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6150888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6150988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6151088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6151188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00200000: {
6151288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x02200000
6151388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6151488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6151588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02200000
6151688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6151788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6151888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6151988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6152088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6152188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6152288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6152388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6152488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // EOR{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6152588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                eor(condition, Best, Register(rd), Register(rn), imm);
6152688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6152788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6152888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6152988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02600000
6153088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6153188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6153288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6153388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6153488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6153588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6153688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6153788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6153888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // RSB{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6153988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                rsb(condition, Best, Register(rd), Register(rn), imm);
6154088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6154188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6154288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6154388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6154488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6154588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00300000: {
6154688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x02300000
6154788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6154888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6154988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02300000
6155088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6155188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6155288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6155388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6155488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6155588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6155688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6155788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6155888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // EORS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6155988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                eors(condition, Best, Register(rd), Register(rn), imm);
6156088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6156188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6156288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6156388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02700000
6156488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6156588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6156688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6156788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6156888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6156988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6157088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6157188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6157288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // RSBS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6157388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                rsbs(condition, Best, Register(rd), Register(rn), imm);
6157488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6157588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6157688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6157788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6157888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6157988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00800000: {
6158088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x02800000
6158188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6158288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6158388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02800000
6158488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000d0000) {
6158588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000d0000: {
6158688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x028d0000
6158788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00020000) {
6158888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6158988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x028d0000
6159088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6159188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6159288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6159388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6159488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6159588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6159688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6159788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ADD{<c>}{<q>} {<Rd>}, SP, #<const> ; A1
6159888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        add(condition, Best, Register(rd), sp, imm);
6159988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6160088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6160188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00020000: {
6160288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x028f0000
6160388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6160488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6160588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6160688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6160788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6160888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6160988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6161088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Label label(imm, kA32PcDelta);
6161188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // ADR{<c>}{<q>} <Rd>, <label> ; A1
6161288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        adr(condition, Best, Register(rd), &label);
6161388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6161488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6161588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6161688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6161788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6161888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6161988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6162088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xd0000) == 0xd0000)) {
6162188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6162288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6162388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6162488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6162588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6162688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6162788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6162888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADD{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6162988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    add(condition, Best, Register(rd), Register(rn), imm);
6163088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6163188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6163288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6163388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6163488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6163588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6163688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02c00000
6163788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6163888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6163988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6164088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6164188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6164288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6164388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6164488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6164588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SBC{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6164688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                sbc(condition, Best, Register(rd), Register(rn), imm);
6164788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6164888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6164988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6165088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6165188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6165288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00900000: {
6165388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x02900000
6165488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6165588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6165688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02900000
6165788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6165888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000d0000: {
6165988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x029d0000
6166088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6166188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6166288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6166388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6166488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6166588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6166688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6166788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADDS{<c>}{<q>} {<Rd>}, SP, #<const> ; A1
6166888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    adds(condition, Best, Register(rd), sp, imm);
6166988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6167088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6167188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6167288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6167388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xd0000)) {
6167488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6167588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6167688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6167788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6167888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6167988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6168088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6168188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // ADDS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6168288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    adds(condition, Best, Register(rd), Register(rn), imm);
6168388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6168488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6168588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6168688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6168788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6168888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6168988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02d00000
6169088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6169188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6169288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6169388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6169488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6169588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6169688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6169788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6169888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SBCS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6169988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                sbcs(condition, Best, Register(rd), Register(rn), imm);
6170088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6170188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6170288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6170388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6170488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6170588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00a00000: {
6170688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x02a00000
6170788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6170888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6170988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02a00000
6171088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6171188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6171288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6171388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6171488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6171588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6171688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6171788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6171888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ADC{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6171988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                adc(condition, Best, Register(rd), Register(rn), imm);
6172088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6172188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6172288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6172388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02e00000
6172488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6172588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6172688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6172788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6172888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6172988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6173088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6173188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6173288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // RSC{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6173388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                rsc(condition, Register(rd), Register(rn), imm);
6173488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6173588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6173688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6173788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6173888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6173988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00b00000: {
6174088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x02b00000
6174188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6174288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6174388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02b00000
6174488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6174588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6174688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6174788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6174888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6174988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6175088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6175188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6175288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ADCS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6175388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                adcs(condition, Best, Register(rd), Register(rn), imm);
6175488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6175588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6175688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6175788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x02f00000
6175888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6175988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6176088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6176188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6176288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6176388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6176488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6176588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6176688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // RSCS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6176788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                rscs(condition, Register(rd), Register(rn), imm);
6176888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6176988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6177088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6177188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6177288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6177388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01000000: {
6177488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x03000000
6177588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6177688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6177788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03000000
6177888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6177988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6178088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6178188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6178288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6178388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6178488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = (instr & 0xfff) | ((instr >> 4) & 0xf000);
6178588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (!ImmediateA32::IsImmediateA32(imm)) {
6178688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // MOV{<c>}{<q>} <Rd>, #<imm16> ; A2
6178788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  mov(condition, Best, Register(rd), imm);
6178888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
6178988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // MOVW{<c>}{<q>} <Rd>, #<imm16> ; A2
6179088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  movw(condition, Register(rd), imm);
6179188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6179288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6179388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6179488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6179588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03400000
6179688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6179788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6179888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6179988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6180088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6180188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6180288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = (instr & 0xfff) | ((instr >> 4) & 0xf000);
6180388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // MOVT{<c>}{<q>} <Rd>, #<imm16> ; A1
6180488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                movt(condition, Register(rd), imm);
6180588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6180688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6180788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6180888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6180988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6181088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01100000: {
6181188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x03100000
6181288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6181388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6181488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03100000
6181588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6181688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6181788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6181888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6181988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6182088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6182188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6182288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // TST{<c>}{<q>} <Rn>, #<const> ; A1
6182388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                tst(condition, Best, Register(rn), imm);
6182488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff0f000) != 0x3100000)) {
6182588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6182688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6182788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6182888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6182988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6183088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03500000
6183188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6183288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6183388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6183488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6183588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6183688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6183788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6183888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // CMP{<c>}{<q>} <Rn>, #<const> ; A1
6183988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                cmp(condition, Best, Register(rn), imm);
6184088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff0f000) != 0x3500000)) {
6184188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6184288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6184388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6184488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6184588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6184688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6184788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6184888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01200000: {
6184988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x03200000
6185088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x004f0000) {
6185188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6185288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03200000
6185388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000000f0) {
6185488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6185588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x03200000
6185688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x0000000f) {
6185788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6185888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x03200000
6185988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6186088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6186188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6186288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6186388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6186488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // NOP{<c>}{<q>} ; A1
6186588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        nop(condition, Best);
6186688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfffffff) != 0x320f000)) {
6186788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6186888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6186988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6187088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6187188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000001: {
6187288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x03200001
6187388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6187488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6187588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6187688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6187788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6187888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // YIELD{<c>}{<q>} ; A1
6187988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        yield(condition, Best);
6188088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfffffff) != 0x320f001)) {
6188188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6188288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6188388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6188488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6188588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000002: {
6188688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x03200002
6188788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6188888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6188988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6189088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6189188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("WFE", instr);
6189288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6189388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6189488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000003: {
6189588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x03200003
6189688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6189788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6189888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6189988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6190088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("WFI", instr);
6190188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6190288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6190388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000004: {
6190488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x03200004
6190588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6190688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6190788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6190888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6190988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("SEV", instr);
6191088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6191188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6191288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000005: {
6191388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x03200005
6191488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6191588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6191688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6191788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6191888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("SEVL", instr);
6191988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6192088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
619214339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
6192288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6192388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6192488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6192588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6192688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6192788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000000f0: {
6192888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x032000f0
6192988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6193088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6193188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6193288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6193388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("DBG", instr);
6193488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6193588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
619364339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6193788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6193888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6193988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6194088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6194188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6194288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
6194388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000) ||
6194488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((instr & 0x4f0000) == 0x0)) {
6194588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6194688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6194788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6194888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6194988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned spec_reg =
6195088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((instr >> 16) & 0xf) | ((instr >> 18) & 0x10);
6195188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6195288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // MSR{<c>}{<q>} <spec_reg>, #<imm> ; A1
6195388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                msr(condition, MaskedSpecialRegister(spec_reg), imm);
6195488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfb0f000) != 0x320f000)) {
6195588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6195688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6195788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6195888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6195988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6196088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6196188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6196288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01300000: {
6196388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x03300000
6196488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6196588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6196688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03300000
6196788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6196888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6196988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6197088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6197188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6197288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6197388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6197488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // TEQ{<c>}{<q>} <Rn>, #<const> ; A1
6197588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                teq(condition, Register(rn), imm);
6197688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff0f000) != 0x3300000)) {
6197788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6197888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6197988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6198088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6198188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6198288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03700000
6198388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6198488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6198588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6198688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6198788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6198888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6198988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6199088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // CMN{<c>}{<q>} <Rn>, #<const> ; A1
6199188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                cmn(condition, Best, Register(rn), imm);
6199288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff0f000) != 0x3700000)) {
6199388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6199488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6199588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6199688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6199788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6199888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6199988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6200088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01800000: {
6200188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x03800000
6200288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6200388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6200488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03800000
6200588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6200688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6200788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6200888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6200988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6201088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6201188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6201288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6201388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ORR{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6201488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                orr(condition, Best, Register(rd), Register(rn), imm);
6201588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6201688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6201788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6201888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03c00000
6201988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6202088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6202188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6202288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6202388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6202488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6202588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6202688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6202788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // BIC{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6202888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                bic(condition, Best, Register(rd), Register(rn), imm);
6202988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6203088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6203188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6203288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6203388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6203488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01900000: {
6203588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x03900000
6203688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6203788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6203888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03900000
6203988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6204088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6204188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6204288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6204388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6204488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6204588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6204688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6204788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // ORRS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6204888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                orrs(condition, Best, Register(rd), Register(rn), imm);
6204988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6205088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6205188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6205288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03d00000
6205388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6205488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6205588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6205688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6205788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6205888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6205988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6206088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6206188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // BICS{<c>}{<q>} {<Rd>}, <Rn>, #<const> ; A1
6206288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                bics(condition, Best, Register(rd), Register(rn), imm);
6206388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6206488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6206588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6206688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6206788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6206888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01a00000: {
6206988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x03a00000
6207088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6207188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6207288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03a00000
6207388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6207488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6207588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6207688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6207788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6207888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6207988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6208088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // MOV{<c>}{<q>} <Rd>, #<const> ; A1
6208188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                mov(condition, Best, Register(rd), imm);
6208288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfff0000) != 0x3a00000)) {
6208388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6208488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6208588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6208688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6208788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6208888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03e00000
6208988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6209088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6209188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6209288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6209388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6209488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6209588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6209688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // MVN{<c>}{<q>} <Rd>, #<const> ; A1
6209788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                mvn(condition, Best, Register(rd), imm);
6209888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfff0000) != 0x3e00000)) {
6209988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6210088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6210188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6210288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6210388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6210488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6210588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6210688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01b00000: {
6210788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x03b00000
6210888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00400000) {
6210988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6211088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03b00000
6211188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6211288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6211388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6211488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6211588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6211688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6211788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6211888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // MOVS{<c>}{<q>} <Rd>, #<const> ; A1
6211988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                movs(condition, Best, Register(rd), imm);
6212088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfff0000) != 0x3b00000)) {
6212188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6212288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6212388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6212488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6212588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00400000: {
6212688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x03f00000
6212788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6212888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6212988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6213088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6213188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6213288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6213388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ImmediateA32::Decode(instr & 0xfff);
6213488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // MVNS{<c>}{<q>} <Rd>, #<const> ; A1
6213588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                mvns(condition, Best, Register(rd), imm);
6213688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xfff0000) != 0x3f00000)) {
6213788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6213888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6213988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6214088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6214188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6214288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6214388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6214488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
6214588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
6214688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
6214788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x04000000: {
6214888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0x04000000
6214988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x00500000) {
6215088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
6215188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x04000000
6215288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x01200000) {
6215388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6215488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x04000000
6215588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6215688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6215788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6215888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6215988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6216088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6216188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6216288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6216388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                int32_t offset = instr & 0xfff;
6216488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STR{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_3> ; A1
6216588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                str(condition,
6216688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6216788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6216888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn), sign, offset, PostIndex));
6216988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6217088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6217188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00200000: {
6217288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x04200000
6217388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6217488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6217588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6217688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6217788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("STRT", instr);
6217888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6217988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6218088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01000000: {
6218188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x05000000
6218288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6218388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6218488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6218588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6218688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6218788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6218888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6218988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6219088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                int32_t offset = instr & 0xfff;
6219188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STR{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}] ; A1
6219288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                str(condition,
6219388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6219488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6219588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn), sign, offset, Offset));
6219688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6219788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6219888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01200000: {
6219988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x05200000
6220088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6220188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6220288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6220388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6220488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((Uint32((instr >> 23)) & Uint32(0x1)) == Uint32(0x0)) &&
6220588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((Uint32((instr >> 16)) & Uint32(0xf)) == Uint32(0xd)) &&
6220688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((Uint32(instr) & Uint32(0xfff)) == Uint32(0x4)) &&
6220788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((instr & 0xf0000000) != 0xf0000000)) {
6220888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Condition condition((instr >> 28) & 0xf);
6220988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rt = (instr >> 12) & 0xf;
6221088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // PUSH{<c>}{<q>} <single_register_list> ; A1
6221188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  push(condition, Best, Register(rt));
6221288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6221388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6221488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6221588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6221688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6221788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6221888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                int32_t offset = instr & 0xfff;
6221988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STR{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}]! ; A1
6222088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                str(condition,
6222188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6222288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6222388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn), sign, offset, PreIndex));
6222488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6222588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6222688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6222788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6222888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6222988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100000: {
6223088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x04100000
6223188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x01200000) {
6223288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6223388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x04100000
6223488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6223588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
6223688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x041f0000
6223788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6223888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0x1200000) == 0x200000)) {
6223988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6224088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6224188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6224288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6224388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6224488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t U = (instr >> 23) & 0x1;
6224588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t imm = instr & 0xfff;
6224688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (U == 0) imm = -imm;
6224788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bool minus_zero = (imm == 0) && (U == 0);
6224888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Label label(imm, kA32PcDelta, minus_zero);
6224988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDR{<c>}{<q>} <Rt>, <label> ; A1
6225088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldr(condition, Best, Register(rt), &label);
6225188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf7f0000) != 0x51f0000)) {
6225288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6225388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6225488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6225588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6225688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6225788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6225888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000)) {
6225988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6226088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6226188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6226288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 23)) & Uint32(0x1)) ==
6226388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Uint32(0x1)) &&
6226488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((Uint32((instr >> 16)) & Uint32(0xf)) ==
6226588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Uint32(0xd)) &&
6226688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((Uint32(instr) & Uint32(0xfff)) == Uint32(0x4)) &&
6226788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
6226888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6226988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt = (instr >> 12) & 0xf;
6227088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // POP{<c>}{<q>} <single_register_list> ; A1
6227188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      pop(condition, Best, Register(rt));
6227288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6227388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6227488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6227588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6227688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6227788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6227888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
6227988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDR{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_3> ; A1
6228088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldr(condition,
6228188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
6228288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rt),
6228388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        MemOperand(Register(rn), sign, offset, PostIndex));
6228488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6228588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6228688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6228788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6228888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6228988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00200000: {
6229088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x04300000
6229188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6229288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6229388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6229488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6229588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("LDRT", instr);
6229688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6229788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6229888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01000000: {
6229988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x05100000
6230088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6230188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
6230288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x051f0000
6230388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6230488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0x1200000) == 0x200000)) {
6230588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6230688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6230788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6230888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6230988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6231088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t U = (instr >> 23) & 0x1;
6231188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t imm = instr & 0xfff;
6231288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (U == 0) imm = -imm;
6231388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bool minus_zero = (imm == 0) && (U == 0);
6231488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Label label(imm, kA32PcDelta, minus_zero);
6231588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDR{<c>}{<q>} <Rt>, <label> ; A1
6231688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldr(condition, Best, Register(rt), &label);
6231788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf7f0000) != 0x51f0000)) {
6231888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6231988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6232088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6232188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6232288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6232388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6232488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000)) {
6232588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6232688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6232788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6232888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6232988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6233088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6233188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6233288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
6233388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDR{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}] ; A1
6233488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldr(condition,
6233588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
6233688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rt),
6233788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        MemOperand(Register(rn), sign, offset, Offset));
6233888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6233988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6234088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6234188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6234288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6234388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01200000: {
6234488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x05300000
6234588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6234688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
6234788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x053f0000
6234888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6234988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0x1200000) == 0x200000)) {
6235088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6235188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6235288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6235388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6235488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6235588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t U = (instr >> 23) & 0x1;
6235688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t imm = instr & 0xfff;
6235788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (U == 0) imm = -imm;
6235888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bool minus_zero = (imm == 0) && (U == 0);
6235988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Label label(imm, kA32PcDelta, minus_zero);
6236088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDR{<c>}{<q>} <Rt>, <label> ; A1
6236188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldr(condition, Best, Register(rt), &label);
6236288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf7f0000) != 0x51f0000)) {
6236388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6236488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6236588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6236688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6236788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6236888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6236988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000)) {
6237088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6237188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6237288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6237388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6237488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6237588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6237688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6237788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
6237888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDR{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}]! ; A1
6237988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldr(condition,
6238088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Best,
6238188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Register(rt),
6238288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        MemOperand(Register(rn), sign, offset, PreIndex));
6238388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6238488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6238588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6238688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6238788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6238888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6238988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6239088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6239188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00400000: {
6239288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x04400000
6239388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x01200000) {
6239488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6239588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x04400000
6239688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6239788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6239888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6239988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6240088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6240188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6240288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6240388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6240488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                int32_t offset = instr & 0xfff;
6240588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STRB{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_3> ; A1
6240688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                strb(condition,
6240788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6240888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6240988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn), sign, offset, PostIndex));
6241088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6241188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6241288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00200000: {
6241388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x04600000
6241488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6241588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6241688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6241788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6241888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("STRBT", instr);
6241988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6242088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6242188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01000000: {
6242288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x05400000
6242388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6242488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6242588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6242688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6242788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6242888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6242988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6243088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6243188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                int32_t offset = instr & 0xfff;
6243288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STRB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}] ; A1
6243388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                strb(condition,
6243488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6243588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6243688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn), sign, offset, Offset));
6243788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6243888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6243988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01200000: {
6244088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x05600000
6244188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6244288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6244388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6244488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6244588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6244688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6244788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6244888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6244988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                int32_t offset = instr & 0xfff;
6245088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STRB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}]! ; A1
6245188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                strb(condition,
6245288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6245388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6245488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn), sign, offset, PreIndex));
6245588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6245688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6245788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6245888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6245988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6246088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00500000: {
6246188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x04500000
6246288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x01200000) {
6246388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6246488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x04500000
6246588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6246688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
6246788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x045f0000
6246888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6246988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0x1200000) == 0x200000)) {
6247088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6247188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6247288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6247388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6247488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6247588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t U = (instr >> 23) & 0x1;
6247688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t imm = instr & 0xfff;
6247788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (U == 0) imm = -imm;
6247888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bool minus_zero = (imm == 0) && (U == 0);
6247988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Label label(imm, kA32PcDelta, minus_zero);
6248088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRB{<c>}{<q>} <Rt>, <label> ; A1
6248188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrb(condition, Register(rt), &label);
6248288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf7f0000) != 0x55f0000)) {
6248388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6248488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6248588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6248688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6248788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6248888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6248988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000)) {
6249088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6249188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6249288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6249388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6249488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6249588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6249688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6249788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
6249888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRB{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm_3> ; A1
6249988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrb(condition,
6250088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6250188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
6250288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn), sign, offset, PostIndex));
6250388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6250488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6250588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6250688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6250788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6250888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00200000: {
6250988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x04700000
6251088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6251188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6251288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6251388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6251488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("LDRBT", instr);
6251588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6251688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6251788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01000000: {
6251888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x05500000
6251988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6252088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
6252188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x055f0000
6252288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6252388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0x1200000) == 0x200000)) {
6252488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6252588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6252688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6252788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6252888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6252988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t U = (instr >> 23) & 0x1;
6253088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t imm = instr & 0xfff;
6253188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (U == 0) imm = -imm;
6253288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bool minus_zero = (imm == 0) && (U == 0);
6253388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Label label(imm, kA32PcDelta, minus_zero);
6253488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRB{<c>}{<q>} <Rt>, <label> ; A1
6253588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrb(condition, Register(rt), &label);
6253688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf7f0000) != 0x55f0000)) {
6253788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6253888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6253988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6254088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6254188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6254288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6254388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000)) {
6254488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6254588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6254688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6254788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6254888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6254988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6255088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6255188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
6255288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}] ; A1
6255388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrb(condition,
6255488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6255588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
6255688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn), sign, offset, Offset));
6255788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6255888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6255988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6256088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6256188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6256288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01200000: {
6256388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x05700000
6256488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6256588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
6256688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x057f0000
6256788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6256888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0x1200000) == 0x200000)) {
6256988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6257088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6257188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6257288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6257388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6257488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t U = (instr >> 23) & 0x1;
6257588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t imm = instr & 0xfff;
6257688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (U == 0) imm = -imm;
6257788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bool minus_zero = (imm == 0) && (U == 0);
6257888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Label label(imm, kA32PcDelta, minus_zero);
6257988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRB{<c>}{<q>} <Rt>, <label> ; A1
6258088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrb(condition, Register(rt), &label);
6258188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf7f0000) != 0x55f0000)) {
6258288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6258388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6258488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6258588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6258688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6258788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6258888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000)) {
6258988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6259088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6259188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6259288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6259388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rt = (instr >> 12) & 0xf;
6259488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6259588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6259688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    int32_t offset = instr & 0xfff;
6259788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // LDRB{<c>}{<q>} <Rt>, [<Rn>{, #{+/-}<imm_3>}]! ; A1
6259888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ldrb(condition,
6259988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Best,
6260088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rt),
6260188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         MemOperand(Register(rn), sign, offset, PreIndex));
6260288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6260388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6260488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6260588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6260688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6260788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6260888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6260988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6261088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
6261188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
6261288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
6261388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x06000000: {
6261488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0x06000000
6261588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01600010) {
6261688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
6261788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x06000000
6261888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
6261988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6262088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06000000
6262188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6262288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6262388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6262488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6262588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6262688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6262788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6262888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6262988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6263088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6263188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6263288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6263388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6263488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6263588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6263688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STR{<c>}{<q>} <Rt>, [<Rn>], {+/-}<Rm>{, <shift>} ; A1
6263788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                str(condition,
6263888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6263988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6264088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
6264188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
6264288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
6264388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
6264488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
6264588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               PostIndex));
6264688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6264788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6264888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6264988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06100000
6265088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6265188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6265288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6265388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6265488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6265588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6265688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6265788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6265888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6265988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6266088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6266188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6266288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6266388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6266488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6266588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDR{<c>}{<q>} <Rt>, [<Rn>], {+/-}<Rm>{, <shift>} ; A1
6266688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldr(condition,
6266788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6266888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6266988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
6267088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
6267188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
6267288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
6267388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
6267488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               PostIndex));
6267588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6267688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6267788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6267888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6267988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6268088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000010: {
6268188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x06000010
6268288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00900060) {
6268388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6268488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06100010
6268588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000080) {
6268688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6268788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06100010
6268888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6268988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6269088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6269188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6269288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6269388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6269488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6269588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6269688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6269788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sadd16(condition, Register(rd), Register(rn), Register(rm));
6269888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6100f10)) {
6269988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6270088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6270188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6270288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6270388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000080: {
6270488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06100090
6270588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6270688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6270788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6270888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6270988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6271088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6271188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6271288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6271388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6271488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    sadd8(condition, Register(rd), Register(rn), Register(rm));
6271588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6100f90)) {
6271688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6271788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6271888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6271988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6272088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6272188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6272288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6272388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100020: {
6272488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06100030
6272588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x00000080) == 0x00000000) {
6272688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xf0000000) == 0xf0000000)) {
6272788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6272888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
6272988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6273088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Condition condition((instr >> 28) & 0xf);
6273188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 12) & 0xf;
6273288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 16) & 0xf;
6273388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = instr & 0xf;
6273488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // SASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6273588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  sasx(condition, Register(rd), Register(rn), Register(rm));
6273688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xff00ff0) != 0x6100f30)) {
6273788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnpredictableA32(instr);
6273888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6273988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
6274088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6274188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6274288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6274388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6274488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100040: {
6274588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06100050
6274688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x00000080) == 0x00000000) {
6274788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xf0000000) == 0xf0000000)) {
6274888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6274988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
6275088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6275188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Condition condition((instr >> 28) & 0xf);
6275288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 12) & 0xf;
6275388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 16) & 0xf;
6275488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = instr & 0xf;
6275588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // SSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6275688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  ssax(condition, Register(rd), Register(rn), Register(rm));
6275788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xff00ff0) != 0x6100f50)) {
6275888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnpredictableA32(instr);
6275988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6276088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
6276188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6276288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6276388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6276488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6276588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100060: {
6276688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06100070
6276788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000080) {
6276888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6276988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06100070
6277088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6277188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6277288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6277388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6277488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6277588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6277688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6277788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6277888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6277988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ssub16(condition, Register(rd), Register(rn), Register(rm));
6278088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6100f70)) {
6278188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6278288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6278388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6278488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6278588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000080: {
6278688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x061000f0
6278788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6278888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6278988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6279088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6279188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6279288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6279388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6279488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6279588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6279688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ssub8(condition, Register(rd), Register(rn), Register(rm));
6279788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6100ff0)) {
6279888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6279988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6280088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6280188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6280288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6280388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6280488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6280588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
6280688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06800010
6280788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6280888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6280988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6281088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6281188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6281288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6281388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6281488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6281588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = (instr >> 7) & 0x1f;
6281688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PKHBT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, LSL #<imm> } ; A1
6281788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pkhbt(condition,
6281888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Register(rd),
6281988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Register(rn),
6282088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Operand(Register(rm), LSL, amount));
6282188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6282288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6282388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800020: {
6282488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06800030
6282588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x00000080) == 0x00000080) {
6282688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xf0000000) == 0xf0000000)) {
6282788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6282888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
6282988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6283088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Condition condition((instr >> 28) & 0xf);
6283188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 12) & 0xf;
6283288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = (instr >> 16) & 0xf;
6283388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = instr & 0xf;
6283488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // SEL{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6283588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  sel(condition, Register(rd), Register(rn), Register(rm));
6283688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xff00ff0) != 0x6800fb0)) {
6283788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnpredictableA32(instr);
6283888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6283988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
6284088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6284188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6284288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6284388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6284488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800040: {
6284588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06800050
6284688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6284788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6284888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6284988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6285088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6285188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6285288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6285388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6285488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = (instr >> 7) & 0x1f;
6285588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (amount == 0) amount = 32;
6285688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // PKHTB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ASR #<imm> } ; A1
6285788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                pkhtb(condition,
6285888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Register(rd),
6285988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Register(rn),
6286088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Operand(Register(rm), ASR, amount));
6286188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6286288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6286388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800060: {
6286488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06800070
6286588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000080) {
6286688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6286788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06800070
6286888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
6286988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
6287088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x068f0070
6287188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6287288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6287388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6287488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6287588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6287688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6287788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6287888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
6287988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SXTB16{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; A1
6288088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sxtb16(condition,
6288188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
6288288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Operand(Register(rm), ROR, amount));
6288388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff03f0) != 0x68f0070)) {
6288488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6288588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6288688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6288788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6288888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6288988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6289088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xf0000)) {
6289188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6289288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6289388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6289488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6289588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6289688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6289788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6289888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
62899d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // SXTAB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; A1 NOLINT(whitespace/line_length)
6290088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sxtab16(condition,
6290188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rd),
6290288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
6290388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Operand(Register(rm), ROR, amount));
6290488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff003f0) != 0x6800070)) {
6290588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6290688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6290788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6290888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6290988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6291088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6291188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
629124339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6291388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6291488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6291588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6291688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6291788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
629184339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
6291988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
6292088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6292188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6292288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6292388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6292488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00200000: {
6292588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x06200000
6292688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
6292788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6292888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06200000
6292988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6293088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6293188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6293288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6293388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("STRT", instr);
6293488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6293588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6293688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6293788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06300000
6293888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6293988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6294088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6294188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6294288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("LDRT", instr);
6294388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6294488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6294588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6294688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6294788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6294888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00200010: {
6294988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x06200010
6295088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800060) {
6295188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6295288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06200010
6295388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6295488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6295588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06200010
6295688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6295788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6295888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6295988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6296088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6296188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6296288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6296388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6296488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // QADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6296588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    qadd16(condition, Register(rd), Register(rn), Register(rm));
6296688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6200f10)) {
6296788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6296888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6296988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6297088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6297188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000080: {
6297288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06200090
6297388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6297488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6297588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6297688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6297788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6297888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6297988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6298088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6298188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // QADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6298288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    qadd8(condition, Register(rd), Register(rn), Register(rm));
6298388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6200f90)) {
6298488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6298588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6298688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6298788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6298888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6298988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06300010
6299088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6299188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6299288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6299388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6299488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6299588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6299688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6299788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6299888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SHADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6299988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    shadd16(condition,
6300088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
6300188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6300288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
6300388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6300f10)) {
6300488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6300588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6300688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6300788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6300888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100080: {
6300988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06300090
6301088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6301188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6301288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6301388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6301488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6301588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6301688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6301788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6301888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SHADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6301988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    shadd8(condition, Register(rd), Register(rn), Register(rm));
6302088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6300f90)) {
6302188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6302288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6302388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6302488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6302588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6302688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6302788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6302888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000020: {
6302988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06200030
6303088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6303188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6303288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06200030
6303388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6303488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6303588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6303688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6303788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6303888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6303988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6304088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6304188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // QASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6304288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    qasx(condition, Register(rd), Register(rn), Register(rm));
6304388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6200f30)) {
6304488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6304588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6304688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6304788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6304888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6304988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06300030
6305088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6305188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6305288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6305388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6305488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6305588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6305688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6305788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6305888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SHASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6305988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    shasx(condition, Register(rd), Register(rn), Register(rm));
6306088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6300f30)) {
6306188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6306288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6306388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6306488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
630654339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6306688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6306788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6306888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6306988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6307088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6307188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000040: {
6307288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06200050
6307388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6307488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6307588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06200050
6307688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6307788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6307888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6307988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6308088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6308188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6308288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6308388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6308488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // QSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6308588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    qsax(condition, Register(rd), Register(rn), Register(rm));
6308688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6200f50)) {
6308788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6308888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6308988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6309088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6309188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6309288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06300050
6309388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6309488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6309588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6309688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6309788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6309888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6309988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6310088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6310188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SHSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6310288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    shsax(condition, Register(rd), Register(rn), Register(rm));
6310388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6300f50)) {
6310488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6310588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6310688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6310788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
631084339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6310988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6311088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6311188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6311288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6311388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6311488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000060: {
6311588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06200070
6311688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6311788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6311888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06200070
6311988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6312088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6312188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6312288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6312388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6312488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6312588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6312688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6312788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // QSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6312888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    qsub16(condition, Register(rd), Register(rn), Register(rm));
6312988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6200f70)) {
6313088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6313188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6313288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6313388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6313488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000080: {
6313588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x062000f0
6313688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6313788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6313888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6313988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6314088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6314188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6314288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6314388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6314488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // QSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6314588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    qsub8(condition, Register(rd), Register(rn), Register(rm));
6314688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6200ff0)) {
6314788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6314888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6314988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6315088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6315188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6315288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06300070
6315388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6315488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6315588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6315688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6315788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6315888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6315988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6316088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6316188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SHSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6316288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    shsub16(condition,
6316388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
6316488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6316588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
6316688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6300f70)) {
6316788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6316888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6316988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6317088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6317188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100080: {
6317288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x063000f0
6317388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6317488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6317588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6317688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6317788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6317888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6317988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6318088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6318188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SHSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6318288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    shsub8(condition, Register(rd), Register(rn), Register(rm));
6318388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6300ff0)) {
6318488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6318588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6318688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6318788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6318888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6318988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6319088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6319188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
6319288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06a00010
6319388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6319488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6319588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6319688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6319788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6319888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6319988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ((instr >> 16) & 0x1f) + 1;
6320088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = instr & 0xf;
6320188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = (instr >> 7) & 0x1f;
6320288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SSAT{<c>}{<q>} <Rd>, #<imm>, <Rn> {, LSL #<amount> } ; A1
6320388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ssat(condition,
6320488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rd),
6320588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     imm,
6320688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Operand(Register(rn), LSL, amount));
6320788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6320888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6320988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800020: {
6321088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06a00030
6321188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6321288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6321388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06a00030
6321488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6321588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6321688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6321788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6321888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6321988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6322088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t imm = ((instr >> 16) & 0xf) + 1;
6322188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6322288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SSAT16{<c>}{<q>} <Rd>, #<imm>, <Rn> ; A1
6322388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ssat16(condition, Register(rd), imm, Register(rn));
6322488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6a00f30)) {
6322588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6322688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6322788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6322888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6322988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6323088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06b00030
6323188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6323288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6323388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6323488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6323588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6323688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6323788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6323888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // REV{<c>}{<q>} <Rd>, <Rm> ; A1
6323988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rev(condition, Best, Register(rd), Register(rm));
6324088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0ff0) != 0x6bf0f30)) {
6324188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6324288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6324388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6324488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6324588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100080: {
6324688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06b000b0
6324788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6324888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6324988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6325088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6325188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6325288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6325388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6325488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // REV16{<c>}{<q>} <Rd>, <Rm> ; A1
6325588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rev16(condition, Best, Register(rd), Register(rm));
6325688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0ff0) != 0x6bf0fb0)) {
6325788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6325888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6325988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6326088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
632614339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6326288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6326388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6326488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6326588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6326688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6326788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800040: {
6326888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06a00050
6326988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6327088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6327188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6327288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6327388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6327488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6327588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = ((instr >> 16) & 0x1f) + 1;
6327688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = instr & 0xf;
6327788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = (instr >> 7) & 0x1f;
6327888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (amount == 0) amount = 32;
6327988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SSAT{<c>}{<q>} <Rd>, #<imm>, <Rn>, ASR #<amount> ; A1
6328088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ssat(condition,
6328188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rd),
6328288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     imm,
6328388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Operand(Register(rn), ASR, amount));
6328488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6328588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6328688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800060: {
6328788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06a00070
6328888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6328988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6329088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06a00070
6329188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
6329288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
6329388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x06af0070
6329488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6329588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6329688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6329788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6329888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6329988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6330088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6330188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
6330288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SXTB{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; A1
6330388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sxtb(condition,
6330488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
6330588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
6330688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), ROR, amount));
6330788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff03f0) != 0x6af0070)) {
6330888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6330988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6331088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6331188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6331288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6331388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6331488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xf0000)) {
6331588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6331688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6331788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6331888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6331988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6332088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6332188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6332288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
63323d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // SXTAB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; A1 NOLINT(whitespace/line_length)
6332488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sxtab(condition,
6332588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
6332688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
6332788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), ROR, amount));
6332888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff003f0) != 0x6a00070)) {
6332988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6333088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6333188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6333288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6333388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6333488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6333588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6333688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6333788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06b00070
6333888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
6333988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
6334088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x06bf0070
6334188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6334288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6334388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6334488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6334588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6334688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6334788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6334888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
6334988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SXTH{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; A1
6335088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sxth(condition,
6335188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
6335288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
6335388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), ROR, amount));
6335488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff03f0) != 0x6bf0070)) {
6335588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6335688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6335788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6335888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6335988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6336088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6336188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xf0000)) {
6336288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6336388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6336488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6336588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6336688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6336788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6336888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6336988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
63370d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // SXTAH{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; A1 NOLINT(whitespace/line_length)
6337188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        sxtah(condition,
6337288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
6337388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
6337488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), ROR, amount));
6337588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff003f0) != 0x6b00070)) {
6337688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6337788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6337888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6337988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6338088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6338188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6338288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
633834339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6338488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6338588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6338688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6338788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6338888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6338988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6339088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6339188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6339288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00400000: {
6339388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x06400000
6339488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
6339588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6339688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06400000
6339788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6339888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6339988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6340088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6340188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6340288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6340388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6340488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6340588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6340688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6340788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6340888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6340988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6341088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6341188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6341288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STRB{<c>}{<q>} <Rt>, [<Rn>], {+/-}<Rm>{, <shift>} ; A1
6341388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                strb(condition,
6341488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6341588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6341688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn),
6341788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign,
6341888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
6341988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift,
6342088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                amount,
6342188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                PostIndex));
6342288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6342388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6342488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6342588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06500000
6342688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6342788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6342888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6342988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6343088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6343188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6343288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6343388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6343488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6343588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6343688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6343788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6343888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6343988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6344088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6344188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDRB{<c>}{<q>} <Rt>, [<Rn>], {+/-}<Rm>{, <shift>} ; A1
6344288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldrb(condition,
6344388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6344488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6344588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn),
6344688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign,
6344788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
6344888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift,
6344988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                amount,
6345088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                PostIndex));
6345188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6345288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6345388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6345488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6345588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6345688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00400010: {
6345788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x06400010
6345888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x009000e0) {
6345988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6346088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06500010
6346188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6346288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6346388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6346488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6346588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6346688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6346788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6346888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6346988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // UADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6347088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uadd16(condition, Register(rd), Register(rn), Register(rm));
6347188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff00ff0) != 0x6500f10)) {
6347288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6347388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6347488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6347588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6347688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100020: {
6347788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06500030
6347888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6347988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6348088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6348188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6348288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6348388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6348488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6348588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6348688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // UASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6348788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uasx(condition, Register(rd), Register(rn), Register(rm));
6348888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff00ff0) != 0x6500f30)) {
6348988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6349088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6349188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6349288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6349388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100040: {
6349488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06500050
6349588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6349688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6349788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6349888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6349988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6350088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6350188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6350288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6350388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // USAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6350488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                usax(condition, Register(rd), Register(rn), Register(rm));
6350588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff00ff0) != 0x6500f50)) {
6350688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6350788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6350888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6350988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6351088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100060: {
6351188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06500070
6351288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6351388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6351488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6351588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6351688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6351788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6351888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6351988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6352088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // USUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6352188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                usub16(condition, Register(rd), Register(rn), Register(rm));
6352288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff00ff0) != 0x6500f70)) {
6352388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6352488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6352588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6352688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6352788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100080: {
6352888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06500090
6352988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6353088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6353188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6353288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6353388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6353488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6353588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6353688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6353788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // UADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6353888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uadd8(condition, Register(rd), Register(rn), Register(rm));
6353988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff00ff0) != 0x6500f90)) {
6354088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6354188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6354288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6354388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6354488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x001000e0: {
6354588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x065000f0
6354688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6354788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6354888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6354988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6355088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6355188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6355288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6355388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6355488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // USUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6355588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                usub8(condition, Register(rd), Register(rn), Register(rm));
6355688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff00ff0) != 0x6500ff0)) {
6355788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6355888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6355988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6356088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6356188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800060: {
6356288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06c00070
6356388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6356488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
6356588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06cf0070
6356688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6356788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6356888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6356988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6357088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6357188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6357288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6357388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t amount = ((instr >> 10) & 0x3) * 8;
6357488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UXTB16{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; A1
6357588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uxtb16(condition,
6357688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
6357788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Operand(Register(rm), ROR, amount));
6357888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff03f0) != 0x6cf0070)) {
6357988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6358088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6358188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6358288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6358388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6358488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6358588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000)) {
6358688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6358788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6358888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6358988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6359088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6359188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6359288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6359388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t amount = ((instr >> 10) & 0x3) * 8;
63594d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                    // UXTAB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; A1 NOLINT(whitespace/line_length)
6359588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uxtab16(condition,
6359688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
6359788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6359888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Operand(Register(rm), ROR, amount));
6359988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff003f0) != 0x6c00070)) {
6360088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6360188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6360288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6360388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6360488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6360588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6360688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
636074339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
6360888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
6360988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6361088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6361188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6361288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6361388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00600000: {
6361488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x06600000
6361588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
6361688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6361788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06600000
6361888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6361988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6362088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6362188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6362288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("STRBT", instr);
6362388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6362488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6362588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6362688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06700000
6362788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6362888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6362988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6363088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6363188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("LDRBT", instr);
6363288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6363388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6363488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6363588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6363688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6363788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00600010: {
6363888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x06600010
6363988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800060) {
6364088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6364188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06600010
6364288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6364388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6364488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06600010
6364588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6364688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6364788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6364888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6364988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6365088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6365188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6365288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6365388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UQADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6365488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uqadd16(condition,
6365588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
6365688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6365788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
6365888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6600f10)) {
6365988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6366088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6366188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6366288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6366388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000080: {
6366488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06600090
6366588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6366688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6366788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6366888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6366988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6367088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6367188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6367288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6367388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UQADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6367488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uqadd8(condition, Register(rd), Register(rn), Register(rm));
6367588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6600f90)) {
6367688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6367788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6367888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6367988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6368088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6368188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06700010
6368288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6368388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6368488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6368588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6368688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6368788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6368888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6368988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6369088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UHADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6369188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uhadd16(condition,
6369288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
6369388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6369488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
6369588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6700f10)) {
6369688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6369788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6369888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6369988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6370088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100080: {
6370188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06700090
6370288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6370388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6370488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6370588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6370688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6370788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6370888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6370988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6371088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UHADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6371188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uhadd8(condition, Register(rd), Register(rn), Register(rm));
6371288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6700f90)) {
6371388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6371488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6371588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6371688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6371788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6371888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6371988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6372088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000020: {
6372188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06600030
6372288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6372388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6372488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06600030
6372588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6372688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6372788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6372888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6372988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6373088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6373188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6373288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6373388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UQASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6373488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uqasx(condition, Register(rd), Register(rn), Register(rm));
6373588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6600f30)) {
6373688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6373788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6373888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6373988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6374088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6374188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06700030
6374288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6374388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6374488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6374588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6374688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6374788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6374888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6374988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6375088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UHASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6375188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uhasx(condition, Register(rd), Register(rn), Register(rm));
6375288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6700f30)) {
6375388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6375488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6375588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6375688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
637574339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6375888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6375988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6376088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6376188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6376288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6376388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000040: {
6376488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06600050
6376588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6376688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6376788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06600050
6376888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6376988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6377088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6377188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6377288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6377388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6377488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6377588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6377688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UQSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6377788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uqsax(condition, Register(rd), Register(rn), Register(rm));
6377888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6600f50)) {
6377988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6378088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6378188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6378288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6378388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6378488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06700050
6378588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6378688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6378788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6378888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6378988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6379088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6379188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6379288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6379388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UHSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6379488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uhsax(condition, Register(rd), Register(rn), Register(rm));
6379588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6700f50)) {
6379688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6379788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6379888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6379988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
638004339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6380188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6380288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6380388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6380488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6380588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6380688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000060: {
6380788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06600070
6380888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6380988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6381088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06600070
6381188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6381288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6381388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6381488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6381588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6381688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6381788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6381888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6381988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UQSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6382088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uqsub16(condition,
6382188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
6382288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6382388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
6382488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6600f70)) {
6382588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6382688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6382788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6382888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6382988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000080: {
6383088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x066000f0
6383188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6383288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6383388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6383488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6383588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6383688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6383788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6383888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6383988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UQSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6384088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uqsub8(condition, Register(rd), Register(rn), Register(rm));
6384188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6600ff0)) {
6384288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6384388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6384488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6384588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6384688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6384788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06700070
6384888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6384988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6385088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6385188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6385288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6385388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6385488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6385588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6385688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UHSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6385788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uhsub16(condition,
6385888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rd),
6385988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6386088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
6386188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6700f70)) {
6386288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6386388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6386488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6386588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6386688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100080: {
6386788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x067000f0
6386888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6386988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6387088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6387188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6387288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6387388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6387488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6387588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6387688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // UHSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6387788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uhsub8(condition, Register(rd), Register(rn), Register(rm));
6387888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6700ff0)) {
6387988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6388088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6388188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6388288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6388388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6388488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6388588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6388688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
6388788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06e00010
6388888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6388988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6389088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6389188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6389288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6389388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6389488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = (instr >> 16) & 0x1f;
6389588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = instr & 0xf;
6389688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = (instr >> 7) & 0x1f;
6389788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // USAT{<c>}{<q>} <Rd>, #<imm>, <Rn> {, LSL #<amount> } ; A1
6389888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                usat(condition,
6389988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rd),
6390088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     imm,
6390188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Operand(Register(rn), LSL, amount));
6390288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6390388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6390488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800020: {
6390588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06e00030
6390688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6390788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6390888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06e00030
6390988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6391088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6391188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6391288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6391388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6391488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6391588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t imm = (instr >> 16) & 0xf;
6391688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6391788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // USAT16{<c>}{<q>} <Rd>, #<imm>, <Rn> ; A1
6391888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    usat16(condition, Register(rd), imm, Register(rn));
6391988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xff00ff0) != 0x6e00f30)) {
6392088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6392188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6392288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6392388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6392488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6392588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06f00030
6392688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6392788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6392888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6392988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6393088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6393188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6393288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6393388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // RBIT{<c>}{<q>} <Rd>, <Rm> ; A1
6393488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    rbit(condition, Register(rd), Register(rm));
6393588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0ff0) != 0x6ff0f30)) {
6393688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6393788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6393888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6393988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6394088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100080: {
6394188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06f000b0
6394288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6394388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6394488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6394588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6394688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6394788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6394888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = instr & 0xf;
6394988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // REVSH{<c>}{<q>} <Rd>, <Rm> ; A1
6395088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    revsh(condition, Best, Register(rd), Register(rm));
6395188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xfff0ff0) != 0x6ff0fb0)) {
6395288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6395388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6395488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6395588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
639564339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6395788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6395888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6395988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6396088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6396188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6396288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800040: {
6396388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06e00050
6396488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6396588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6396688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6396788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6396888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6396988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6397088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm = (instr >> 16) & 0x1f;
6397188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = instr & 0xf;
6397288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = (instr >> 7) & 0x1f;
6397388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (amount == 0) amount = 32;
6397488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // USAT{<c>}{<q>} <Rd>, #<imm>, <Rn>, ASR #<amount> ; A1
6397588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                usat(condition,
6397688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rd),
6397788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     imm,
6397888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Operand(Register(rn), ASR, amount));
6397988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6398088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6398188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800060: {
6398288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x06e00070
6398388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6398488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6398588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06e00070
6398688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
6398788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
6398888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x06ef0070
6398988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6399088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6399188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6399288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6399388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6399488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6399588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6399688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
6399788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // UXTB{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; A1
6399888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uxtb(condition,
6399988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
6400088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
6400188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), ROR, amount));
6400288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff03f0) != 0x6ef0070)) {
6400388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6400488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6400588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6400688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6400788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6400888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6400988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xf0000)) {
6401088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6401188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6401288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6401388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6401488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6401588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6401688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6401788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
64018d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // UXTAB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; A1 NOLINT(whitespace/line_length)
6401988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uxtab(condition,
6402088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
6402188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
6402288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), ROR, amount));
6402388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff003f0) != 0x6e00070)) {
6402488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6402588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6402688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6402788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6402888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6402988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6403088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6403188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6403288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x06f00070
6403388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x000f0000) {
6403488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x000f0000: {
6403588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x06ff0070
6403688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6403788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6403888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6403988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6404088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6404188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6404288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6404388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
6404488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // UXTH{<c>}{<q>} {<Rd>}, <Rm> {, ROR #<amount> } ; A1
6404588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uxth(condition,
6404688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Best,
6404788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rd),
6404888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Operand(Register(rm), ROR, amount));
6404988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfff03f0) != 0x6ff0070)) {
6405088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6405188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6405288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6405388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6405488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6405588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6405688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xf0000)) {
6405788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6405888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6405988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6406088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6406188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 12) & 0xf;
6406288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6406388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = instr & 0xf;
6406488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t amount = ((instr >> 10) & 0x3) * 8;
64065d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                        // UXTAH{<c>}{<q>} {<Rd>}, <Rn>, <Rm> {, ROR #<amount> } ; A1 NOLINT(whitespace/line_length)
6406688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uxtah(condition,
6406788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
6406888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
6406988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Operand(Register(rm), ROR, amount));
6407088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xff003f0) != 0x6f00070)) {
6407188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6407288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6407388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6407488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6407588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6407688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6407788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
640784339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6407988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6408088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6408188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6408288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6408388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6408488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6408588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6408688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6408788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01000000: {
6408888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x07000000
6408988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
6409088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6409188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07000000
6409288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6409388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6409488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6409588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6409688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6409788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6409888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6409988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6410088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6410188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6410288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6410388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6410488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6410588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6410688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6410788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
6410888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STR{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}] ; A1
6410988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                str(condition,
6411088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6411188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6411288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
6411388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
6411488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
6411588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
6411688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
6411788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               addrmode));
6411888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6411988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6412088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6412188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07100000
6412288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6412388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6412488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6412588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6412688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6412788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6412888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6412988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6413088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6413188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6413288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6413388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6413488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6413588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6413688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6413788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
6413888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDR{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}] ; A1
6413988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldr(condition,
6414088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6414188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6414288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
6414388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
6414488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
6414588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
6414688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
6414788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               addrmode));
6414888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6414988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6415088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6415188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6415288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6415388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01000010: {
6415488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x07000010
6415588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x009000e0) {
6415688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6415788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07000010
6415888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x0000f000) {
6415988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x0000f000: {
6416088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0700f010
6416188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6416288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6416388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6416488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6416588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6416688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6416788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6416888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6416988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMUAD{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6417088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smuad(condition, Register(rd), Register(rn), Register(rm));
6417188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6417288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6417388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6417488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6417588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf000) == 0xf000)) {
6417688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6417788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6417888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6417988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6418088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6418188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6418288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6418388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned ra = (instr >> 12) & 0xf;
6418488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMLAD{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6418588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smlad(condition,
6418688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
6418788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rn),
6418888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm),
6418988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(ra));
6419088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6419188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6419288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6419388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6419488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6419588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000020: {
6419688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07000030
6419788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x0000f000) {
6419888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x0000f000: {
6419988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0700f030
6420088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6420188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6420288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6420388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6420488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6420588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6420688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6420788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6420888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMUADX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6420988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smuadx(condition, Register(rd), Register(rn), Register(rm));
6421088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6421188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6421288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6421388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6421488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf000) == 0xf000)) {
6421588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6421688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6421788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6421888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6421988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6422088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6422188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6422288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned ra = (instr >> 12) & 0xf;
6422388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMLADX{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6422488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smladx(condition,
6422588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
6422688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
6422788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
6422888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(ra));
6422988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6423088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6423188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6423288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6423388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6423488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000040: {
6423588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07000050
6423688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x0000f000) {
6423788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x0000f000: {
6423888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0700f050
6423988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6424088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6424188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6424288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6424388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6424488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6424588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6424688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6424788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMUSD{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6424888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smusd(condition, Register(rd), Register(rn), Register(rm));
6424988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6425088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6425188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6425288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6425388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf000) == 0xf000)) {
6425488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6425588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6425688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6425788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6425888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6425988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6426088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6426188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned ra = (instr >> 12) & 0xf;
6426288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMLSD{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6426388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smlsd(condition,
6426488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
6426588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rn),
6426688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm),
6426788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(ra));
6426888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6426988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6427088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6427188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6427288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6427388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000060: {
6427488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07000070
6427588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x0000f000) {
6427688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x0000f000: {
6427788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0700f070
6427888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6427988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6428088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6428188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6428288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6428388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6428488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6428588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6428688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMUSDX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6428788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smusdx(condition, Register(rd), Register(rn), Register(rm));
6428888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6428988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6429088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6429188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6429288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf000) == 0xf000)) {
6429388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6429488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6429588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6429688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6429788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6429888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6429988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6430088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned ra = (instr >> 12) & 0xf;
6430188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMLSDX{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6430288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smlsdx(condition,
6430388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
6430488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
6430588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
6430688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(ra));
6430788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6430888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6430988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6431088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6431188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6431288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6431388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07100010
6431488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6431588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6431688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6431788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6431888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6431988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 16) & 0xf;
6432088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = instr & 0xf;
6432188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = (instr >> 8) & 0xf;
6432288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SDIV{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6432388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                sdiv(condition, Register(rd), Register(rn), Register(rm));
6432488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xff0f0f0) != 0x710f010)) {
6432588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnpredictableA32(instr);
6432688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6432788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6432888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6432988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
6433088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07800010
6433188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x0000f000) {
6433288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x0000f000: {
6433388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0780f010
6433488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6433588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6433688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6433788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6433888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6433988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6434088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6434188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6434288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // USAD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6434388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    usad8(condition, Register(rd), Register(rn), Register(rm));
6434488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6434588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6434688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6434788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6434888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf000) == 0xf000)) {
6434988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6435088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6435188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6435288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6435388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6435488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6435588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6435688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned ra = (instr >> 12) & 0xf;
6435788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // USADA8{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6435888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    usada8(condition,
6435988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
6436088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
6436188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
6436288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(ra));
6436388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6436488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6436588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6436688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6436788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
643684339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
6436988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
6437088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6437188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6437288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6437388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6437488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01200000: {
6437588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x07200000
6437688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
6437788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6437888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07200000
6437988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6438088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6438188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6438288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6438388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6438488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6438588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6438688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6438788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6438888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6438988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6439088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6439188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6439288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6439388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6439488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = PreIndex;
6439588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STR{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}]! ; A1
6439688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                str(condition,
6439788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6439888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6439988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
6440088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
6440188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
6440288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
6440388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
6440488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               addrmode));
6440588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6440688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6440788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6440888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07300000
6440988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6441088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6441188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6441288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6441388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6441488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6441588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6441688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6441788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6441888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6441988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6442088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6442188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6442288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6442388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6442488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = PreIndex;
6442588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDR{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}]! ; A1
6442688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldr(condition,
6442788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Best,
6442888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Register(rt),
6442988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    MemOperand(Register(rn),
6443088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               sign,
6443188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
6443288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               shift,
6443388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               amount,
6443488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               addrmode));
6443588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6443688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6443788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6443888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6443988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6444088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01200010: {
6444188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x07200010
6444288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800060) {
6444388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6444488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07200010
6444588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0x00100080) == 0x00100000) {
6444688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xf0000000) == 0xf0000000)) {
6444788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6444888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    return;
6444988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6445088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Condition condition((instr >> 28) & 0xf);
6445188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rd = (instr >> 16) & 0xf;
6445288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rn = instr & 0xf;
6445388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  unsigned rm = (instr >> 8) & 0xf;
6445488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // UDIV{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6445588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  udiv(condition, Register(rd), Register(rn), Register(rm));
6445688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  if (((instr & 0xff0f0f0) != 0x730f010)) {
6445788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnpredictableA32(instr);
6445888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6445988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
6446088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6446188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6446288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6446388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6446488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800040: {
6446588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07a00050
6446688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6446788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6446888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6446988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6447088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6447188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6447288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = instr & 0xf;
6447388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t lsb = (instr >> 7) & 0x1f;
6447488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t widthm1 = (instr >> 16) & 0x1f;
6447588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t width = widthm1 + 1;
6447688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // SBFX{<c>}{<q>} <Rd>, <Rn>, #<lsb>, #<width> ; A1
6447788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                sbfx(condition, Register(rd), Register(rn), lsb, width);
6447888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6447988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
644804339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
6448188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
6448288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6448388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6448488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6448588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6448688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01400000: {
6448788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x07400000
6448888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
6448988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6449088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07400000
6449188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6449288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6449388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6449488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6449588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6449688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6449788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6449888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6449988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6450088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6450188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6450288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6450388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6450488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6450588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6450688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
6450788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STRB{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}] ; A1
6450888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                strb(condition,
6450988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6451088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6451188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn),
6451288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign,
6451388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
6451488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift,
6451588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                amount,
6451688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                addrmode));
6451788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6451888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6451988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6452088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07500000
6452188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6452288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6452388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6452488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6452588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6452688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6452788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6452888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6452988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6453088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6453188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6453288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6453388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6453488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6453588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6453688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = Offset;
6453788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDRB{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}] ; A1
6453888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldrb(condition,
6453988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6454088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6454188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn),
6454288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign,
6454388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
6454488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift,
6454588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                amount,
6454688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                addrmode));
6454788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6454888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6454988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6455088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6455188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6455288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01400010: {
6455388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x07400010
6455488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800060) {
6455588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6455688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07400010
6455788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6455888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6455988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x07400010
6456088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6456188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6456288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6456388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6456488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6456588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rdlo = (instr >> 12) & 0xf;
6456688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rdhi = (instr >> 16) & 0xf;
6456788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6456888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6456988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMLALD{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
6457088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smlald(condition,
6457188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rdlo),
6457288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rdhi),
6457388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
6457488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
6457588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6457688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6457788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6457888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x07500010
6457988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x0000f000) {
6458088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x0000f000: {
6458188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0750f010
6458288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6458388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6458488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6458588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6458688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6458788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
6458888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6458988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6459088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMMUL{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6459188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smmul(condition,
6459288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
6459388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
6459488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm));
6459588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6459688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6459788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6459888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6459988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf000) == 0xf000)) {
6460088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6460188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6460288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6460388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6460488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
6460588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6460688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6460788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
6460888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMMLA{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6460988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smmla(condition,
6461088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rd),
6461188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rn),
6461288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(rm),
6461388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Register(ra));
6461488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6461588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6461688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6461788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6461888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
646194339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6462088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6462188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6462288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6462388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6462488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6462588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000020: {
6462688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07400030
6462788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6462888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6462988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x07400030
6463088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6463188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6463288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6463388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6463488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6463588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rdlo = (instr >> 12) & 0xf;
6463688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rdhi = (instr >> 16) & 0xf;
6463788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6463888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6463988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMLALDX{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
6464088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smlaldx(condition,
6464188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdlo),
6464288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdhi),
6464388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6464488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
6464588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6464688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6464788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6464888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x07500030
6464988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x0000f000) {
6465088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x0000f000: {
6465188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0750f030
6465288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6465388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6465488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6465588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6465688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6465788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
6465888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6465988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6466088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMMULR{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
6466188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smmulr(condition,
6466288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
6466388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
6466488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm));
6466588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6466688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6466788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6466888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6466988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf000) == 0xf000)) {
6467088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6467188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6467288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6467388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6467488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = (instr >> 16) & 0xf;
6467588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = instr & 0xf;
6467688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = (instr >> 8) & 0xf;
6467788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned ra = (instr >> 12) & 0xf;
6467888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // SMMLAR{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6467988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        smmlar(condition,
6468088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rd),
6468188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
6468288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rm),
6468388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(ra));
6468488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6468588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6468688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6468788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6468888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
646894339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6469088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6469188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6469288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6469388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6469488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6469588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000040: {
6469688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07400050
6469788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6469888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6469988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x07400050
6470088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6470188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6470288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6470388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6470488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6470588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rdlo = (instr >> 12) & 0xf;
6470688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rdhi = (instr >> 16) & 0xf;
6470788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6470888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6470988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMLSLD{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
6471088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smlsld(condition,
6471188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rdlo),
6471288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rdhi),
6471388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
6471488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm));
6471588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6471688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6471788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100080: {
6471888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x075000d0
6471988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6472088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6472188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6472288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6472388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6472488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6472588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6472688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6472788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned ra = (instr >> 12) & 0xf;
6472888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMMLS{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6472988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smmls(condition,
6473088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rd),
6473188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rn),
6473288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(rm),
6473388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Register(ra));
6473488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6473588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
647364339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6473788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6473888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6473988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6474088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6474188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6474288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000060: {
6474388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07400070
6474488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100080) {
6474588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6474688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x07400070
6474788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6474888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6474988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6475088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6475188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6475288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rdlo = (instr >> 12) & 0xf;
6475388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rdhi = (instr >> 16) & 0xf;
6475488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6475588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6475688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMLSLDX{<c>}{<q>} <Rd>, <Rd>, <Rn>, <Rm> ; A1
6475788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smlsldx(condition,
6475888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdlo),
6475988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rdhi),
6476088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rn),
6476188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Register(rm));
6476288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6476388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6476488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100080: {
6476588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x075000f0
6476688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6476788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6476888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6476988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6477088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6477188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 16) & 0xf;
6477288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6477388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rm = (instr >> 8) & 0xf;
6477488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned ra = (instr >> 12) & 0xf;
6477588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // SMMLSR{<c>}{<q>} <Rd>, <Rn>, <Rm>, <Ra> ; A1
6477688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    smmlsr(condition,
6477788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rd),
6477888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rn),
6477988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rm),
6478088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(ra));
6478188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6478288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
647834339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                  default:
6478488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnallocatedA32(instr);
6478588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6478688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6478788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6478888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6478988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
6479088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07c00010
6479188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x0000000f) {
6479288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x0000000f: {
6479388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x07c0001f
6479488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6479588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6479688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6479788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6479888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6479988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6480088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t lsb = (instr >> 7) & 0x1f;
6480188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t msb = (instr >> 16) & 0x1f;
6480288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t width = msb - lsb + 1;
6480388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // BFC{<c>}{<q>} <Rd>, #<lsb>, #<width> ; A1
6480488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bfc(condition, Register(rd), lsb, width);
6480588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6480688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6480788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6480888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6480988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf) == 0xf)) {
6481088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6481188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6481288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6481388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6481488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rd = (instr >> 12) & 0xf;
6481588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = instr & 0xf;
6481688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t lsb = (instr >> 7) & 0x1f;
6481788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t msb = (instr >> 16) & 0x1f;
6481888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    uint32_t width = msb - lsb + 1;
6481988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // BFI{<c>}{<q>} <Rd>, <Rn>, #<lsb>, #<width> ; A1
6482088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    bfi(condition, Register(rd), Register(rn), lsb, width);
6482188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6482288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6482388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6482488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6482588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
648264339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
6482788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
6482888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6482988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6483088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6483188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6483288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01600000: {
6483388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x07600000
6483488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00100000) {
6483588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6483688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07600000
6483788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6483888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6483988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6484088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6484188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6484288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6484388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6484488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6484588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6484688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6484788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6484888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6484988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6485088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6485188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6485288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = PreIndex;
6485388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STRB{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}]! ; A1
6485488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                strb(condition,
6485588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6485688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6485788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn),
6485888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign,
6485988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
6486088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift,
6486188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                amount,
6486288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                addrmode));
6486388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6486488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6486588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00100000: {
6486688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07700000
6486788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6486888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6486988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6487088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6487188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6487288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rt = (instr >> 12) & 0xf;
6487388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6487488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Sign sign(((instr >> 23) & 0x1) == 0 ? minus : plus);
6487588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rm = instr & 0xf;
6487688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t imm_and_type_ = ((instr >> 5) & 0x7f);
6487788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ImmediateShiftOperand shift_operand(imm_and_type_ & 0x3,
6487888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    (imm_and_type_ & 0x7c) >>
6487988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        2);
6488088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Shift shift = shift_operand.GetShift();
6488188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t amount = shift_operand.GetAmount();
6488288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                AddrMode addrmode = PreIndex;
6488388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDRB{<c>}{<q>} <Rt>, [<Rn>, {+/-}<Rm>{, <shift>}]! ; A1
6488488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldrb(condition,
6488588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Best,
6488688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     Register(rt),
6488788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                     MemOperand(Register(rn),
6488888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                sign,
6488988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rm),
6489088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                shift,
6489188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                amount,
6489288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                addrmode));
6489388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6489488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6489588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6489688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6489788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6489888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01600010: {
6489988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x07600010
6490088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00800060) {
6490188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800040: {
6490288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07e00050
6490388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6490488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6490588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6490688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6490788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6490888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rd = (instr >> 12) & 0xf;
6490988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = instr & 0xf;
6491088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t lsb = (instr >> 7) & 0x1f;
6491188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t widthm1 = (instr >> 16) & 0x1f;
6491288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                uint32_t width = widthm1 + 1;
6491388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // UBFX{<c>}{<q>} <Rd>, <Rn>, #<lsb>, #<width> ; A1
6491488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ubfx(condition, Register(rd), Register(rn), lsb, width);
6491588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6491688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6491788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800060: {
6491888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x07e00070
6491988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if ((instr & 0xf0100080) == 0xe0100080) {
6492088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  uint32_t imm = (instr & 0xf) | ((instr >> 4) & 0xfff0);
6492188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // UDF{<c>}{<q>} {#}<imm> ; A1
6492288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  udf(al, Best, imm);
6492388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                } else {
6492488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6492588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6492688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6492788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
649284339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard              default:
6492988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnallocatedA32(instr);
6493088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6493188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6493288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6493388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6493488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
6493588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
6493688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
6493788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x08000000: {
6493888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0x08000000
6493988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x00500000) {
6494088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
6494188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x08000000
6494288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x01800000) {
6494388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6494488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x08000000
6494588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6494688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6494788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6494888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6494988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6495088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6495188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                WriteBack write_back((instr >> 21) & 0x1);
6495288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                RegisterList registers((instr & 0xffff));
6495388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STMDA{<c>}{<q>} <Rn>{!}, <registers> ; A1
6495488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                stmda(condition, Register(rn), write_back, registers);
6495588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6495688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6495788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
6495888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x08800000
6495988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6496088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6496188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6496288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6496388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6496488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6496588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                WriteBack write_back((instr >> 21) & 0x1);
6496688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                RegisterList registers((instr & 0xffff));
6496788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STM{<c>}{<q>} <Rn>{!}, <registers> ; A1
6496888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                stm(condition, Best, Register(rn), write_back, registers);
6496988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6497088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6497188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01000000: {
6497288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x09000000
6497388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6497488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6497588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6497688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6497788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((Uint32((instr >> 21)) & Uint32(0x1)) == Uint32(0x1)) &&
6497888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((Uint32((instr >> 16)) & Uint32(0xf)) == Uint32(0xd)) &&
6497988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((instr & 0xf0000000) != 0xf0000000) &&
6498082af61c481f2d54e5718320a32af9ad933e0bf7dPierre Langlois                    (BitCount((Uint32(instr) & Uint32(0xffff))) > Int64(1))) {
6498188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Condition condition((instr >> 28) & 0xf);
6498288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  RegisterList registers((instr & 0xffff));
6498388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // PUSH{<c>}{<q>} <registers> ; A1
6498488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  push(condition, Best, registers);
6498588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6498688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6498788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6498888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6498988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                WriteBack write_back((instr >> 21) & 0x1);
6499088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                RegisterList registers((instr & 0xffff));
6499188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STMDB{<c>}{<q>} <Rn>{!}, <registers> ; A1
6499288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                stmdb(condition, Best, Register(rn), write_back, registers);
6499388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6499488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6499588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01800000: {
6499688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x09800000
6499788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6499888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6499988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6500088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6500188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6500288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6500388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                WriteBack write_back((instr >> 21) & 0x1);
6500488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                RegisterList registers((instr & 0xffff));
6500588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // STMIB{<c>}{<q>} <Rn>{!}, <registers> ; A1
6500688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                stmib(condition, Register(rn), write_back, registers);
6500788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6500888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6500988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6501088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6501188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6501288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100000: {
6501388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x08100000
6501488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x01800000) {
6501588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6501688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x08100000
6501788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6501888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6501988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6502088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6502188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6502288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6502388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                WriteBack write_back((instr >> 21) & 0x1);
6502488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                RegisterList registers((instr & 0xffff));
6502588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDMDA{<c>}{<q>} <Rn>{!}, <registers> ; A1
6502688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldmda(condition, Register(rn), write_back, registers);
6502788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6502888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6502988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00800000: {
6503088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x08900000
6503188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6503288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6503388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6503488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6503588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((Uint32((instr >> 21)) & Uint32(0x1)) == Uint32(0x1)) &&
6503688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((Uint32((instr >> 16)) & Uint32(0xf)) == Uint32(0xd)) &&
6503788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    ((instr & 0xf0000000) != 0xf0000000) &&
6503882af61c481f2d54e5718320a32af9ad933e0bf7dPierre Langlois                    (BitCount((Uint32(instr) & Uint32(0xffff))) > Int64(1))) {
6503988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  Condition condition((instr >> 28) & 0xf);
6504088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  RegisterList registers((instr & 0xffff));
6504188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  // POP{<c>}{<q>} <registers> ; A1
6504288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  pop(condition, Best, registers);
6504388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6504488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6504588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6504688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6504788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                WriteBack write_back((instr >> 21) & 0x1);
6504888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                RegisterList registers((instr & 0xffff));
6504988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDM{<c>}{<q>} <Rn>{!}, <registers> ; A1
6505088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldm(condition, Best, Register(rn), write_back, registers);
6505188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6505288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6505388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01000000: {
6505488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x09100000
6505588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6505688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6505788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6505888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6505988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6506088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6506188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                WriteBack write_back((instr >> 21) & 0x1);
6506288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                RegisterList registers((instr & 0xffff));
6506388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDMDB{<c>}{<q>} <Rn>{!}, <registers> ; A1
6506488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldmdb(condition, Register(rn), write_back, registers);
6506588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6506688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6506788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x01800000: {
6506888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x09900000
6506988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6507088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6507188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6507288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6507388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                Condition condition((instr >> 28) & 0xf);
6507488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                unsigned rn = (instr >> 16) & 0xf;
6507588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                WriteBack write_back((instr >> 21) & 0x1);
6507688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                RegisterList registers((instr & 0xffff));
6507788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // LDMIB{<c>}{<q>} <Rn>{!}, <registers> ; A1
6507888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                ldmib(condition, Register(rn), write_back, registers);
6507988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6508088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6508188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6508288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6508388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6508488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00400000: {
6508588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x08400000
6508688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xf0000000) == 0xf0000000)) {
6508788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
6508888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
6508988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6509088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            UnimplementedA32("STM", instr);
6509188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6509288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6509388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00500000: {
6509488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x08500000
6509588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00008000) {
6509688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6509788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x08500000
6509888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6509988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6510088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6510188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6510288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("LDM", instr);
6510388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6510488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6510588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00008000: {
6510688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x08508000
6510788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                if (((instr & 0xf0000000) == 0xf0000000)) {
6510888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  UnallocatedA32(instr);
6510988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  return;
6511088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6511188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                UnimplementedA32("LDM", instr);
6511288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6511388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6511488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6511588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6511688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6511788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
6511888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
6511988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
6512088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0a000000: {
6512188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0x0a000000
6512288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01000000) {
6512388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
6512488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x0a000000
6512588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xf0000000) == 0xf0000000)) {
6512688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
6512788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
6512888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6512988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            Condition condition((instr >> 28) & 0xf);
6513088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            int32_t imm = SignExtend<int32_t>(instr & 0xffffff, 24) << 2;
6513188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            Label label(imm, kA32PcDelta);
6513288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // B{<c>}{<q>} <label> ; A1
6513388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            b(condition, Best, &label);
6513488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6513588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6513688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01000000: {
6513788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x0b000000
6513888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xf0000000) == 0xf0000000)) {
6513988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
6514088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
6514188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6514288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            Condition condition((instr >> 28) & 0xf);
6514388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            int32_t imm = SignExtend<int32_t>(instr & 0xffffff, 24) << 2;
6514488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            Label label(imm, kA32PcDelta);
6514588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // BL{<c>}{<q>} <label> ; A1
6514688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            bl(condition, &label);
6514788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6514888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6514988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
6515088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
6515188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
6515288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0c000000: {
6515388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0x0c000000
6515488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01100000) {
6515588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
6515688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x0c000000
6515788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000e00) {
6515888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000a00: {
6515988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x0c000a00
6516088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00800100) {
6516188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6516288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c000a00
6516388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x006000d0) == 0x00400010) {
6516488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xf0000000) == 0xf0000000)) {
6516588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6516688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
6516788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6516888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6516988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractSRegister(instr, 5, 0);
6517088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt = (instr >> 12) & 0xf;
6517188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt2 = (instr >> 16) & 0xf;
6517288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VMOV{<c>}{<q>} <Sm>, <Sm1>, <Rt>, <Rt2> ; A1
6517388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vmov(condition,
6517488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           SRegister(rm),
6517588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           SRegister(rm + 1),
6517688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rt),
6517788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rt2));
6517888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
6517988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6518088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6518188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6518288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6518388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000100: {
6518488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c000b00
6518588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x006000d0) == 0x00400010) {
6518688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xf0000000) == 0xf0000000)) {
6518788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6518888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
6518988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6519088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6519188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractDRegister(instr, 5, 0);
6519288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt = (instr >> 12) & 0xf;
6519388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt2 = (instr >> 16) & 0xf;
6519488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VMOV{<c>}{<q>} <Dm>, <Rt>, <Rt2> ; A1
6519588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vmov(condition,
6519688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rm),
6519788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rt),
6519888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rt2));
6519988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
6520088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6520188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6520288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6520388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6520488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800000: {
6520588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c800a00
6520688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6520788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6520888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6520988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6521088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6521188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6521288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    WriteBack write_back((instr >> 21) & 0x1);
6521388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned first = ExtractSRegister(instr, 22, 12);
6521488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned len = instr & 0xff;
6521588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VSTM{<c>}{<q>}{.<size>} <Rn>{!}, <sreglist> ; A2
6521688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vstm(condition,
6521788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
6521888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
6521988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         write_back,
6522071bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                         SRegisterList(SRegister(first), len));
6522188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((len == 0) || ((first + len) > kNumberOfSRegisters)) {
6522288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6522388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6522488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6522588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6522688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800100: {
6522788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c800b00
6522888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000001) {
6522988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6523088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0c800b00
6523188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6523288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6523388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6523488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6523588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6523688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6523788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        WriteBack write_back((instr >> 21) & 0x1);
6523888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
6523988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned imm8 = (instr & 0xff);
6524088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned len = imm8 / 2;
6524188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned end = first + len;
6524288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VSTM{<c>}{<q>}{.<size>} <Rn>{!}, <dreglist> ; A1
6524388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vstm(condition,
6524488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             kDataTypeValueNone,
6524588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
6524688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             write_back,
6524771bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                             DRegisterList(DRegister(first), len));
6524888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((len == 0) || (len > 16) ||
6524988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (end > kMaxNumberOfDRegisters)) {
6525088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6525188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6525288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6525388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6525488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000001: {
6525588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0c800b01
6525688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6525788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6525888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6525988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6526088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6526188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6526288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        WriteBack write_back((instr >> 21) & 0x1);
6526388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
6526488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned imm8 = (instr & 0xff);
6526588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned len = imm8 / 2;
6526688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned end = first + len;
6526788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // FSTMIAX{<c>}{<q>} <Rn>{!}, <dreglist> ; A1
6526888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        fstmiax(condition,
6526988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
6527088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                write_back,
6527171bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                DRegisterList(DRegister(first), len));
6527288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((len == 0) || (len > 16) || (end > 16)) {
6527388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6527488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6527588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6527688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6527788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6527888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6527988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6528088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6528188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6528288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6528388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
6528488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00200000) {
6528588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6528688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c000000
6528788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800000) {
6528888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6528988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0c000000
6529088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00400000) == 0x00400000) {
6529188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000000) == 0xf0000000) ||
6529288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr & 0xe00) == 0xa00)) {
6529388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
6529488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
6529588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6529688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedA32("MCRR", instr);
6529788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
6529888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6529988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6530088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6530188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6530288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
6530388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0c800000
6530488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6530588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe00) == 0xa00)) {
6530688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6530788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6530888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6530988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("STC", instr);
6531088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6531188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6531288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6531388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6531488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6531588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
6531688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c200000
6531788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6531888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xe00) == 0xa00)) {
6531988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6532088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6532188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6532288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("STC", instr);
6532388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6532488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6532588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6532688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6532788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6532888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6532988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6533088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6533188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00100000: {
6533288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x0c100000
6533388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000e00) {
6533488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000a00: {
6533588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x0c100a00
6533688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00800100) {
6533788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6533888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c100a00
6533988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x006000d0) == 0x00400010) {
6534088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xf0000000) == 0xf0000000)) {
6534188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6534288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
6534388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6534488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6534588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt = (instr >> 12) & 0xf;
6534688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt2 = (instr >> 16) & 0xf;
6534788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractSRegister(instr, 5, 0);
6534888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VMOV{<c>}{<q>} <Rt>, <Rt2>, <Sm>, <Sm1> ; A1
6534988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vmov(condition,
6535088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rt),
6535188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rt2),
6535288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           SRegister(rm),
6535388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           SRegister(rm + 1));
6535488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
6535588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6535688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6535788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6535888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6535988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000100: {
6536088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c100b00
6536188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((instr & 0x006000d0) == 0x00400010) {
6536288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if (((instr & 0xf0000000) == 0xf0000000)) {
6536388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6536488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        return;
6536588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6536688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6536788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt = (instr >> 12) & 0xf;
6536888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rt2 = (instr >> 16) & 0xf;
6536988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned rm = ExtractDRegister(instr, 5, 0);
6537088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VMOV{<c>}{<q>} <Rt>, <Rt2>, <Dm> ; A1
6537188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vmov(condition,
6537288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rt),
6537388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           Register(rt2),
6537488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           DRegister(rm));
6537588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    } else {
6537688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6537788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6537888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6537988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6538088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800000: {
6538188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c900a00
6538288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000)) {
6538388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6538488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6538588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6538688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((Uint32((instr >> 21)) & Uint32(0x1)) ==
6538788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Uint32(0x1)) &&
6538888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((Uint32((instr >> 16)) & Uint32(0xf)) ==
6538988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Uint32(0xd)) &&
6539088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000000) != 0xf0000000)) {
6539188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      Condition condition((instr >> 28) & 0xf);
6539288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned first = ExtractSRegister(instr, 22, 12);
6539388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      unsigned len = instr & 0xff;
6539488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      // VPOP{<c>}{<q>}{.<size>} <sreglist> ; A2
6539588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      vpop(condition,
6539688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                           kDataTypeValueNone,
6539771bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                           SRegisterList(SRegister(first), len));
6539888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      if ((len == 0) || ((first + len) > kNumberOfSRegisters)) {
6539988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnpredictableA32(instr);
6540088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6540188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6540288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6540388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    Condition condition((instr >> 28) & 0xf);
6540488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned rn = (instr >> 16) & 0xf;
6540588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    WriteBack write_back((instr >> 21) & 0x1);
6540688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned first = ExtractSRegister(instr, 22, 12);
6540788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    unsigned len = instr & 0xff;
6540888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // VLDM{<c>}{<q>}{.<size>} <Rn>{!}, <sreglist> ; A2
6540988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    vldm(condition,
6541088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         kDataTypeValueNone,
6541188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         Register(rn),
6541288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                         write_back,
6541371bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                         SRegisterList(SRegister(first), len));
6541488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if ((len == 0) || ((first + len) > kNumberOfSRegisters)) {
6541588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnpredictableA32(instr);
6541688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6541788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6541888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6541988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00800100: {
6542088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c900b00
6542188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000001) {
6542288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6542388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0c900b00
6542488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6542588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6542688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6542788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6542888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 21)) & Uint32(0x1)) ==
6542988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0x1)) &&
6543088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((Uint32((instr >> 16)) & Uint32(0xf)) ==
6543188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0xd)) &&
6543288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000000) != 0xf0000000)) {
6543388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 28) & 0xf);
6543488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned first = ExtractDRegister(instr, 22, 12);
6543588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned imm8 = (instr & 0xff);
6543688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned len = imm8 / 2;
6543788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned end = first + len;
6543888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VPOP{<c>}{<q>}{.<size>} <dreglist> ; A1
6543988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vpop(condition,
6544088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               kDataTypeValueNone,
6544171bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                               DRegisterList(DRegister(first), len));
6544288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((len == 0) || (len > 16) ||
6544388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              (end > kMaxNumberOfDRegisters)) {
6544488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableA32(instr);
6544588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6544688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6544788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6544888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6544988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6545088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        WriteBack write_back((instr >> 21) & 0x1);
6545188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
6545288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned imm8 = (instr & 0xff);
6545388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned len = imm8 / 2;
6545488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned end = first + len;
6545588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VLDM{<c>}{<q>}{.<size>} <Rn>{!}, <dreglist> ; A1
6545688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vldm(condition,
6545788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             kDataTypeValueNone,
6545888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Register(rn),
6545988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             write_back,
6546071bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                             DRegisterList(DRegister(first), len));
6546188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((len == 0) || (len > 16) ||
6546288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (end > kMaxNumberOfDRegisters)) {
6546388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6546488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6546588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6546688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6546788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000001: {
6546888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0c900b01
6546988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6547088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6547188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6547288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6547388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6547488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6547588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        WriteBack write_back((instr >> 21) & 0x1);
6547688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractDRegister(instr, 22, 12);
6547788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned imm8 = (instr & 0xff);
6547888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned len = imm8 / 2;
6547988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned end = first + len;
6548088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // FLDMIAX{<c>}{<q>} <Rn>{!}, <dreglist> ; A1
6548188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        fldmiax(condition,
6548288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Register(rn),
6548388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                write_back,
6548471bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                DRegisterList(DRegister(first), len));
6548588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((len == 0) || (len > 16) || (end > 16)) {
6548688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6548788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6548888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6548988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6549088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6549188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6549288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6549388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6549488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6549588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6549688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              default: {
6549788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00200000) {
6549888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6549988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c100000
6550088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800000) {
6550188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6550288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0c100000
6550388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((instr & 0x00400000) == 0x00400000) {
6550488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if (((instr & 0xf0000000) == 0xf0000000) ||
6550588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((instr & 0xe00) == 0xa00)) {
6550688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnallocatedA32(instr);
6550788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            return;
6550888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6550988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnimplementedA32("MRRC", instr);
6551088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        } else {
6551188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6551288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6551388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6551488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6551588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
6551688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0c900000
6551788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000f0000) {
6551888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000f0000: {
6551988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0c9f0000
6552088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6552188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xe00) == 0xa00)) {
6552288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6552388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6552488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6552588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnimplementedA32("LDC", instr);
6552688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6552788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6552888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          default: {
6552988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6553088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000) ||
6553188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xe00) == 0xa00)) {
6553288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6553388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6553488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6553588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnimplementedA32("LDC", instr);
6553688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6553788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6553888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6553988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6554088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6554188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6554288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6554388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6554488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00200000: {
6554588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0c300000
6554688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6554788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000) ||
6554888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xe00) == 0xa00)) {
6554988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6555088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6555188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6555288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("LDC", instr);
6555388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6555488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6555588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6555688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6555788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6555888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6555988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6556088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6556188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01000000: {
6556288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x0d000000
6556388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00200000) {
6556488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6556588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x0d000000
6556688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000e00) {
6556788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000a00: {
6556888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0d000a00
6556988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000100) {
6557088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6557188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0d000a00
6557288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6557388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6557488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6557588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6557688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6557788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6557888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6557988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6558088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = (instr & 0xff) << 2;
6558188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VSTR{<c>}{<q>}{.32} <Sd>, [<Rn>{, #{+/-}<imm>}] ; A2
6558288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vstr(condition,
6558388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             kDataTypeValueNone,
6558488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6558588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             MemOperand(Register(rn), sign, offset, Offset));
6558688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6558788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6558888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
6558988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0d000b00
6559088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6559188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6559288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6559388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6559488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6559588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6559688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6559788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Sign sign((((instr >> 23) & 0x1) == 0) ? minus : plus);
6559888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        int32_t offset = (instr & 0xff) << 2;
6559988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VSTR{<c>}{<q>}{.64} <Dd>, [<Rn>{, #{+/-}<imm>}] ; A1
6560088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vstr(condition,
6560188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             kDataTypeValueNone,
6560288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6560388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             MemOperand(Register(rn), sign, offset, Offset));
6560488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6560588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6560688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6560788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6560888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6560988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6561088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6561188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xe00) == 0xa00)) {
6561288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6561388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6561488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6561588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("STC", instr);
6561688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6561788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6561888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6561988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6562088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6562188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00200000: {
6562288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x0d200000
6562388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000e00) {
6562488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000a00: {
6562588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0d200a00
6562688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800100) {
6562788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6562888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0d200a00
6562988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6563088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6563188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6563288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6563388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((Uint32((instr >> 16)) & Uint32(0xf)) ==
6563488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             Uint32(0xd)) &&
6563588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000000) != 0xf0000000)) {
6563688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          Condition condition((instr >> 28) & 0xf);
6563788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned first = ExtractSRegister(instr, 22, 12);
6563888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          unsigned len = instr & 0xff;
6563988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          // VPUSH{<c>}{<q>}{.<size>} <sreglist> ; A2
6564088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          vpush(condition,
6564188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                kDataTypeValueNone,
6564271bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                SRegisterList(SRegister(first), len));
6564388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          if ((len == 0) ||
6564488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              ((first + len) > kNumberOfSRegisters)) {
6564588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            UnpredictableA32(instr);
6564688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6564788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6564888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6564988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6565088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6565188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractSRegister(instr, 22, 12);
6565288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned len = instr & 0xff;
6565388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VSTMDB{<c>}{<q>}{.<size>} <Rn>!, <sreglist> ; A2
6565488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vstmdb(condition,
6565588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               kDataTypeValueNone,
6565688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
6565788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               WriteBack(WRITE_BACK),
6565871bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                               SRegisterList(SRegister(first), len));
6565988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((len == 0) ||
6566088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((first + len) > kNumberOfSRegisters)) {
6566188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6566288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6566388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6566488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6566588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
6566688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0d200b00
6566788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000001) {
6566888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6566988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0d200b00
6567088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6567188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6567288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6567388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6567488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((Uint32((instr >> 16)) & Uint32(0xf)) ==
6567588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Uint32(0xd)) &&
6567688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000000) != 0xf0000000)) {
6567788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Condition condition((instr >> 28) & 0xf);
6567888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned first = ExtractDRegister(instr, 22, 12);
6567988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned imm8 = (instr & 0xff);
6568088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned len = imm8 / 2;
6568188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned end = first + len;
6568288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VPUSH{<c>}{<q>}{.<size>} <dreglist> ; A1
6568388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vpush(condition,
6568488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    kDataTypeValueNone,
6568571bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                    DRegisterList(DRegister(first), len));
6568688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if ((len == 0) || (len > 16) ||
6568788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  (end > kMaxNumberOfDRegisters)) {
6568888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableA32(instr);
6568988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6569088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6569188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6569288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6569388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6569488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
6569588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned imm8 = (instr & 0xff);
6569688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned len = imm8 / 2;
6569788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned end = first + len;
6569888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VSTMDB{<c>}{<q>}{.<size>} <Rn>!, <dreglist> ; A1
6569988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vstmdb(condition,
6570088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
6570188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
6570288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   WriteBack(WRITE_BACK),
6570371bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                   DRegisterList(DRegister(first), len));
6570488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((len == 0) || (len > 16) ||
6570588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (end > kMaxNumberOfDRegisters)) {
6570688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6570788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6570888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6570988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6571088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000001: {
6571188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0d200b01
6571288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6571388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6571488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6571588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6571688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6571788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6571888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
6571988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned imm8 = (instr & 0xff);
6572088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned len = imm8 / 2;
6572188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned end = first + len;
6572288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // FSTMDBX{<c>}{<q>} <Rn>!, <dreglist> ; A1
6572388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            fstmdbx(condition,
6572488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
6572588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    WriteBack(WRITE_BACK),
6572671bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                    DRegisterList(DRegister(first), len));
6572788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((len == 0) || (len > 16) || (end > 16)) {
6572888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6572988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6573088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6573188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6573288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6573388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6573488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
657354339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
6573688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6573788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6573888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6573988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6574088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6574188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6574288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6574388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xe00) == 0xa00)) {
6574488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6574588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6574688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6574788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("STC", instr);
6574888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6574988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6575088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6575188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6575288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6575388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6575488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6575588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6575688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01100000: {
6575788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x0d100000
6575888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00200000) {
6575988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6576088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x0d100000
6576188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x000f0000) {
6576288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x000f0000: {
6576388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0d1f0000
6576488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000e00) {
6576588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000a00: {
6576688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0d1f0a00
6576788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
6576888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6576988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0d1f0a00
6577088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6577188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6577288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6577388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6577488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6577588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractSRegister(instr, 22, 12);
6577688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6577788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = instr & 0xff;
6577888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            imm <<= 2;
6577988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6578088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6578188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6578288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLDR{<c>}{<q>}{.32} <Sd>, <label> ; A2
6578388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vldr(condition,
6578488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 kDataTypeValueNone,
6578588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rd),
6578688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 &label);
6578788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6578888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6578988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
6579088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0d1f0b00
6579188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6579288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6579388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6579488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6579588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6579688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
6579788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t U = (instr >> 23) & 0x1;
6579888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t imm = instr & 0xff;
6579988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            imm <<= 2;
6580088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (U == 0) imm = -imm;
6580188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            bool minus_zero = (imm == 0) && (U == 0);
6580288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Label label(imm, kA32PcDelta, minus_zero);
6580388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLDR{<c>}{<q>}{.64} <Dd>, <label> ; A1
6580488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vldr(condition,
6580588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 kDataTypeValueNone,
6580688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
6580788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 &label);
6580888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6580988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6581088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6581188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6581288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6581388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6581488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6581588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe00) == 0xa00)) {
6581688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6581788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6581888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6581988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("LDC", instr);
6582088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6582188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6582288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6582388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6582488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6582588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6582688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000e00) {
6582788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000a00: {
6582888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0d100a00
6582988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
6583088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6583188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0d100a00
6583288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6583388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6583488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6583588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6583688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6583788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6583888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractSRegister(instr, 22, 12);
6583988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6584088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6584188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6584288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset = (instr & 0xff) << 2;
65843d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLDR{<c>}{<q>}{.32} <Sd>, [<Rn>{, #{+/-}<imm>}] ; A2 NOLINT(whitespace/line_length)
6584488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vldr(condition,
6584588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 kDataTypeValueNone,
6584688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rd),
6584788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
6584888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
6584988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
6585088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Offset));
6585188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6585288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6585388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
6585488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0d100b00
6585588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000) ||
6585688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr & 0xf0000) == 0xf0000)) {
6585788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6585888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6585988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6586088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6586188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
6586288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6586388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Sign sign((((instr >> 23) & 0x1) == 0) ? minus
6586488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                                   : plus);
6586588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            int32_t offset = (instr & 0xff) << 2;
65866d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VLDR{<c>}{<q>}{.64} <Dd>, [<Rn>{, #{+/-}<imm>}] ; A1 NOLINT(whitespace/line_length)
6586788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vldr(condition,
6586888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 kDataTypeValueNone,
6586988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
6587088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 MemOperand(Register(rn),
6587188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            sign,
6587288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            offset,
6587388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                            Offset));
6587488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6587588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6587688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6587788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6587888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6587988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6588088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6588188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xf0000) == 0xf0000) ||
6588288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe00) == 0xa00)) {
6588388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6588488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6588588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6588688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("LDC", instr);
6588788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6588888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6588988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6589088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6589188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6589288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6589388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6589488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6589588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00200000: {
6589688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x0d300000
6589788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000e00) {
6589888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000a00: {
6589988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0d300a00
6590088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00800100) {
6590188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6590288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0d300a00
6590388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6590488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6590588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6590688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6590788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6590888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = (instr >> 16) & 0xf;
6590988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned first = ExtractSRegister(instr, 22, 12);
6591088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned len = instr & 0xff;
6591188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VLDMDB{<c>}{<q>}{.<size>} <Rn>!, <sreglist> ; A2
6591288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vldmdb(condition,
6591388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               kDataTypeValueNone,
6591488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               Register(rn),
6591588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                               WriteBack(WRITE_BACK),
6591671bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                               SRegisterList(SRegister(first), len));
6591788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if ((len == 0) ||
6591888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((first + len) > kNumberOfSRegisters)) {
6591988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6592088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6592188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6592288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6592388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
6592488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0d300b00
6592588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000001) {
6592688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6592788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0d300b00
6592888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6592988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6593088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6593188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6593288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6593388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6593488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
6593588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned imm8 = (instr & 0xff);
6593688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned len = imm8 / 2;
6593788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned end = first + len;
6593888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VLDMDB{<c>}{<q>}{.<size>} <Rn>!, <dreglist> ; A1
6593988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vldmdb(condition,
6594088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   kDataTypeValueNone,
6594188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   Register(rn),
6594288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   WriteBack(WRITE_BACK),
6594371bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                   DRegisterList(DRegister(first), len));
6594488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((len == 0) || (len > 16) ||
6594588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                (end > kMaxNumberOfDRegisters)) {
6594688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6594788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6594888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6594988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6595088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000001: {
6595188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0d300b01
6595288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6595388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6595488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6595588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6595688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6595788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = (instr >> 16) & 0xf;
6595888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned first = ExtractDRegister(instr, 22, 12);
6595988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned imm8 = (instr & 0xff);
6596088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned len = imm8 / 2;
6596188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned end = first + len;
6596288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // FLDMDBX{<c>}{<q>} <Rn>!, <dreglist> ; A1
6596388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            fldmdbx(condition,
6596488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Register(rn),
6596588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    WriteBack(WRITE_BACK),
6596671bca307f4e94afdbc753e02c101b042cd218b4aPierre Langlois                                    DRegisterList(DRegister(first), len));
6596788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((len == 0) || (len > 16) || (end > 16)) {
6596888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6596988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6597088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6597188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6597288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6597388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6597488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
659754339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
6597688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6597788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6597888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6597988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6598088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6598188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6598288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6598388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xf0000) == 0xf0000) ||
6598488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xe00) == 0xa00)) {
6598588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6598688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6598788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6598888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("LDC", instr);
6598988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6599088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6599188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6599288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6599388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6599488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6599588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6599688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6599788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
6599888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
6599988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
6600088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      case 0x0e000000: {
6600188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        // 0x0e000000
6600288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        switch (instr & 0x01000000) {
6600388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x00000000: {
6600488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x0e000000
6600588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            switch (instr & 0x00000010) {
6600688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000000: {
6600788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x0e000000
6600888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00000e00) {
6600988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000a00: {
6601088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0e000a00
6601188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00b00140) {
6601288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000000: {
6601388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e000a00
6601488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6601588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6601688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6601788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6601888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6601988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6602088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6602188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6602288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMLA{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; A2
6602388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmla(condition,
6602488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F32,
6602588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6602688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rn),
6602788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rm));
6602888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6602988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6603088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000040: {
6603188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e000a40
6603288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6603388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6603488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6603588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6603688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6603788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6603888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6603988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6604088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMLS{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; A2
6604188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmls(condition,
6604288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F32,
6604388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6604488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rn),
6604588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rm));
6604688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6604788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6604888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000100: {
6604988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e000b00
6605088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6605188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6605288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6605388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6605488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6605588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6605688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6605788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6605888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMLA{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; A2
6605988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmla(condition,
6606088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F64,
6606188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6606288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
6606388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
6606488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6606588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6606688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000140: {
6606788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e000b40
6606888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6606988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6607088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6607188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6607288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6607388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6607488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6607588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6607688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMLS{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; A2
6607788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmls(condition,
6607888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F64,
6607988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6608088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
6608188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
6608288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6608388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6608488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00100000: {
6608588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e100a00
6608688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6608788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6608888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6608988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6609088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6609188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6609288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6609388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6609488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VNMLS{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; A1
6609588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vnmls(condition,
6609688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F32,
6609788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rd),
6609888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rn),
6609988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rm));
6610088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6610188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6610288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00100040: {
6610388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e100a40
6610488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6610588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6610688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6610788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6610888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6610988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6611088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6611188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6611288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VNMLA{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; A1
6611388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vnmla(condition,
6611488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F32,
6611588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rd),
6611688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rn),
6611788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rm));
6611888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6611988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6612088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00100100: {
6612188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e100b00
6612288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6612388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6612488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6612588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6612688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6612788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6612888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6612988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6613088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VNMLS{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; A1
6613188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vnmls(condition,
6613288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F64,
6613388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rd),
6613488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
6613588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
6613688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6613788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6613888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00100140: {
6613988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e100b40
6614088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6614188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6614288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6614388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6614488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6614588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6614688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6614788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6614888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VNMLA{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; A1
6614988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vnmla(condition,
6615088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F64,
6615188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rd),
6615288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
6615388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
6615488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6615588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6615688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200000: {
6615788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e200a00
6615888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6615988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6616088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6616188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6616288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6616388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6616488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6616588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6616688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMUL{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; A2
6616788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmul(condition,
6616888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F32,
6616988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6617088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rn),
6617188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rm));
6617288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6617388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6617488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200040: {
6617588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e200a40
6617688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6617788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6617888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6617988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6618088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6618188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6618288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6618388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6618488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VNMUL{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; A1
6618588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vnmul(condition,
6618688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F32,
6618788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rd),
6618888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rn),
6618988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rm));
6619088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6619188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6619288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200100: {
6619388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e200b00
6619488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6619588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6619688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6619788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6619888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6619988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6620088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6620188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6620288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMUL{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; A2
6620388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmul(condition,
6620488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F64,
6620588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6620688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
6620788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
6620888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6620988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6621088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00200140: {
6621188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e200b40
6621288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6621388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6621488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6621588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6621688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6621788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6621888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6621988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6622088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VNMUL{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; A1
6622188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vnmul(condition,
6622288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F64,
6622388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rd),
6622488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
6622588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
6622688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6622788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6622888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00300000: {
6622988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e300a00
6623088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6623188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6623288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6623388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6623488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6623588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6623688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6623788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6623888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VADD{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; A2
6623988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vadd(condition,
6624088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F32,
6624188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6624288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rn),
6624388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rm));
6624488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6624588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6624688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00300040: {
6624788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e300a40
6624888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6624988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6625088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6625188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6625288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6625388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6625488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6625588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6625688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VSUB{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; A2
6625788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vsub(condition,
6625888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F32,
6625988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6626088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rn),
6626188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rm));
6626288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6626388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6626488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00300100: {
6626588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e300b00
6626688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6626788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6626888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6626988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6627088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6627188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6627288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6627388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6627488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VADD{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; A2
6627588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vadd(condition,
6627688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F64,
6627788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6627888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
6627988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
6628088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6628188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6628288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00300140: {
6628388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e300b40
6628488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6628588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6628688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6628788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6628888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6628988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6629088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6629188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6629288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VSUB{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; A2
6629388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vsub(condition,
6629488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F64,
6629588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6629688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
6629788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
6629888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6629988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6630088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800000: {
6630188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e800a00
6630288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6630388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6630488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6630588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6630688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6630788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6630888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6630988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6631088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VDIV{<c>}{<q>}.F32 {<Sd>}, <Sn>, <Sm> ; A1
6631188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vdiv(condition,
6631288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F32,
6631388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6631488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rn),
6631588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rm));
6631688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6631788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6631888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00800100: {
6631988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e800b00
6632088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6632188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6632288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6632388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6632488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6632588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6632688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6632788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6632888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VDIV{<c>}{<q>}.F64 {<Dd>}, <Dn>, <Dm> ; A1
6632988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vdiv(condition,
6633088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F64,
6633188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6633288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
6633388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
6633488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6633588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6633688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00900000: {
6633788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e900a00
6633888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6633988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6634088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6634188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6634288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6634388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6634488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6634588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6634688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VFNMS{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; A1
6634788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vfnms(condition,
6634888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F32,
6634988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rd),
6635088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rn),
6635188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rm));
6635288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6635388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6635488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00900040: {
6635588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e900a40
6635688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6635788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6635888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6635988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6636088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6636188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6636288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6636388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6636488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VFNMA{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; A1
6636588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vfnma(condition,
6636688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F32,
6636788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rd),
6636888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rn),
6636988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              SRegister(rm));
6637088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6637188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6637288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00900100: {
6637388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e900b00
6637488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6637588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6637688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6637788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6637888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6637988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6638088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6638188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6638288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VFNMS{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; A1
6638388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vfnms(condition,
6638488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F64,
6638588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rd),
6638688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
6638788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
6638888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6638988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6639088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00900140: {
6639188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e900b40
6639288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6639388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6639488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6639588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6639688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6639788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6639888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6639988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6640088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VFNMA{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; A1
6640188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vfnma(condition,
6640288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              F64,
6640388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rd),
6640488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rn),
6640588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DRegister(rm));
6640688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6640788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6640888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00a00000: {
6640988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0ea00a00
6641088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6641188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6641288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6641388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6641488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6641588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6641688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6641788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6641888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VFMA{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; A2
6641988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vfma(condition,
6642088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F32,
6642188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6642288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rn),
6642388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rm));
6642488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6642588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6642688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00a00040: {
6642788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0ea00a40
6642888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6642988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6643088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6643188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6643288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6643388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6643488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractSRegister(instr, 7, 16);
6643588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractSRegister(instr, 5, 0);
6643688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VFMS{<c>}{<q>}.F32 <Sd>, <Sn>, <Sm> ; A2
6643788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vfms(condition,
6643888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F32,
6643988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rd),
6644088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rn),
6644188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             SRegister(rm));
6644288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6644388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6644488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00a00100: {
6644588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0ea00b00
6644688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6644788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6644888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6644988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6645088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6645188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6645288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6645388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6645488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VFMA{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; A2
6645588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vfma(condition,
6645688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F64,
6645788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6645888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
6645988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
6646088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6646188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6646288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00a00140: {
6646388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0ea00b40
6646488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6646588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6646688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6646788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6646888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6646988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6647088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rn = ExtractDRegister(instr, 7, 16);
6647188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rm = ExtractDRegister(instr, 5, 0);
6647288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VFMS{<c>}{<q>}.F64 <Dd>, <Dn>, <Dm> ; A2
6647388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vfms(condition,
6647488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             F64,
6647588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rd),
6647688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rn),
6647788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                             DRegister(rm));
6647888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6647988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6648088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00b00000: {
6648188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0eb00a00
6648288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6648388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6648488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6648588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6648688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6648788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractSRegister(instr, 22, 12);
6648888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t encoded_imm =
6648988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (instr & 0xf) | ((instr >> 12) & 0xf0);
6649088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        NeonImmediate imm =
6649188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ImmediateVFP::Decode<float>(encoded_imm);
6649288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMOV{<c>}{<q>}.F32 <Sd>, #<imm> ; A2
6649388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmov(condition, F32, SRegister(rd), imm);
6649488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfb00ff0) != 0xeb00a00)) {
6649588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6649688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6649788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6649888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6649988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00b00040: {
6650088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0eb00a40
6650188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000e0000) {
6650288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6650388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb00a40
6650488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6650588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6650688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb00a40
6650788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6650888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6650988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6651088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6651188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6651288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6651388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6651488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VMOV{<c>}{<q>}.F32 <Sd>, <Sm> ; A2
6651588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vmov(condition,
6651688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
6651788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6651888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
6651988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6652088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6652188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6652288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb00ac0
6652388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6652488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6652588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6652688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6652788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6652888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6652988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6653088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VABS{<c>}{<q>}.F32 <Sd>, <Sm> ; A2
6653188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vabs(condition,
6653288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
6653388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6653488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
6653588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6653688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6653788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6653888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb10a40
6653988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6654088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6654188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6654288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6654388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6654488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6654588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6654688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VNEG{<c>}{<q>}.F32 <Sd>, <Sm> ; A2
6654788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vneg(condition,
6654888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
6654988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6655088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
6655188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6655288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6655388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6655488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb10ac0
6655588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6655688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6655788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6655888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6655988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6656088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6656188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6656288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VSQRT{<c>}{<q>}.F32 <Sd>, <Sm> ; A1
6656388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vsqrt(condition,
6656488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
6656588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6656688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6656788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6656888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6656988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6657088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6657188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6657288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00020000: {
6657388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb20a40
6657488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6657588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6657688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb20a40
6657788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6657888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6657988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6658088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6658188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6658288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6658388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6658488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTB{<c>}{<q>}.F32.F16 <Sd>, <Sm> ; A1
6658588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtb(condition,
6658688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
6658788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F16,
6658888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6658988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6659088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6659188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6659288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6659388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb20ac0
6659488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6659588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6659688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6659788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6659888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6659988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6660088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6660188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTT{<c>}{<q>}.F32.F16 <Sd>, <Sm> ; A1
6660288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtt(condition,
6660388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
6660488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F16,
6660588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6660688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6660788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6660888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6660988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6661088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb30a40
6661188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6661288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6661388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6661488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6661588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6661688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6661788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6661888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTB{<c>}{<q>}.F16.F32 <Sd>, <Sm> ; A1
6661988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtb(condition,
6662088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F16,
6662188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
6662288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6662388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6662488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6662588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6662688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6662788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb30ac0
6662888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6662988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6663088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6663188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6663288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6663388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6663488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6663588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTT{<c>}{<q>}.F16.F32 <Sd>, <Sm> ; A1
6663688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtt(condition,
6663788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F16,
6663888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
6663988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6664088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6664188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6664288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6664388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6664488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6664588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6664688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00040000: {
6664788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb40a40
6664888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6664988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6665088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb40a40
6665188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6665288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6665388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6665488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6665588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6665688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6665788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6665888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCMP{<c>}{<q>}.F32 <Sd>, <Sm> ; A1
6665988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcmp(condition,
6666088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
6666188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6666288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
6666388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6666488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6666588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6666688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb40ac0
6666788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6666888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6666988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6667088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6667188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6667288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6667388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6667488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCMPE{<c>}{<q>}.F32 <Sd>, <Sm> ; A1
6667588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcmpe(condition,
6667688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
6667788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6667888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6667988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6668088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6668188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6668288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb50a40
6668388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6668488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6668588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6668688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6668788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6668888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6668988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCMP{<c>}{<q>}.F32 <Sd>, #0.0 ; A2
6669088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcmp(condition, F32, SRegister(rd), 0.0);
6669188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfbf0fff) != 0xeb50a40)) {
6669288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableA32(instr);
6669388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6669488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6669588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6669688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6669788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb50ac0
6669888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6669988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6670088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6670188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6670288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6670388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6670488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCMPE{<c>}{<q>}.F32 <Sd>, #0.0 ; A2
6670588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcmpe(condition, F32, SRegister(rd), 0.0);
6670688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfbf0fff) != 0xeb50ac0)) {
6670788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableA32(instr);
6670888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6670988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6671088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6671188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6671288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6671388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6671488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00060000: {
6671588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb60a40
6671688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6671788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6671888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb60a40
6671988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6672088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6672188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6672288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6672388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6672488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6672588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6672688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VRINTR{<c>}{<q>}.F32.F32 <Sd>, <Sm> ; A1
6672788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrintr(condition,
6672888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
6672988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
6673088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
6673188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rm));
6673288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6673388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6673488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6673588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb60ac0
6673688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6673788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6673888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6673988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6674088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6674188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6674288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6674388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VRINTZ{<c>}{<q>}.F32.F32 <Sd>, <Sm> ; A1
6674488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrintz(condition,
6674588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
6674688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
6674788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
6674888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rm));
6674988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6675088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6675188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6675288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb70a40
6675388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6675488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6675588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6675688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6675788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6675888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6675988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6676088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VRINTX{<c>}{<q>}.F32.F32 <Sd>, <Sm> ; A1
6676188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrintx(condition,
6676288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
6676388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F32,
6676488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rd),
6676588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SRegister(rm));
6676688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6676788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6676888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6676988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb70ac0
6677088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6677188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6677288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6677388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6677488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6677588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6677688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6677788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVT{<c>}{<q>}.F64.F32 <Dd>, <Sm> ; A1
6677888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvt(condition,
6677988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F64,
6678088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
6678188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
6678288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
6678388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6678488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6678588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6678688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6678788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6678888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00080000: {
6678988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb80a40
6679088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x00010000) == 0x00000000) {
6679188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000000) == 0xf0000000)) {
6679288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
6679388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
6679488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6679588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Condition condition((instr >> 28) & 0xf);
6679688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
6679788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
6679888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
6679988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
6680088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6680188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractSRegister(instr, 22, 12);
6680288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
6680388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VCVT{<c>}{<q>}.F32.<dt> <Sd>, <Sm> ; A1
6680488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vcvt(condition,
6680588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F32,
6680688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
6680788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rd),
6680888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
6680988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
6681088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6681188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6681288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6681388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6681488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000a0000: {
6681588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eba0a40
6681688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6681788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6681888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6681988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6682088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6682188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_U_sx_1_Decode(
6682288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr >> 7) & 0x1) | ((instr >> 15) & 0x2));
6682388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
6682488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6682588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6682688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6682788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractSRegister(instr, 22, 12);
6682888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned offset = 32;
6682988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(S16) || dt.Is(U16)) {
6683088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              offset = 16;
6683188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6683288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t fbits = offset - (((instr >> 5) & 0x1) |
6683388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr << 1) & 0x1e));
66834d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VCVT{<c>}{<q>}.F32.<dt> <Sdm>, <Sdm>, #<fbits> ; A1 NOLINT(whitespace/line_length)
6683588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vcvt(condition,
6683688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 F32,
6683788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
6683888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rd),
6683988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rd),
6684088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 fbits);
6684188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6684288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6684388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000c0000: {
6684488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0ebc0a40
6684588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6684688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6684788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ebc0a40
6684888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6684988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6685088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6685188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6685288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6685388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6685488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6685588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTR{<c>}{<q>}.U32.F32 <Sd>, <Sm> ; A1
6685688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtr(condition,
6685788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      U32,
6685888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
6685988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6686088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6686188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6686288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6686388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6686488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ebc0ac0
6686588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6686688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6686788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6686888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6686988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6687088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6687188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6687288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVT{<c>}{<q>}.U32.F32 <Sd>, <Sm> ; A1
6687388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvt(condition,
6687488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     U32,
6687588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
6687688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6687788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
6687888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6687988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6688088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6688188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ebd0a40
6688288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6688388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6688488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6688588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6688688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6688788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6688888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6688988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTR{<c>}{<q>}.S32.F32 <Sd>, <Sm> ; A1
6689088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtr(condition,
6689188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      S32,
6689288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F32,
6689388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6689488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6689588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6689688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6689788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6689888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ebd0ac0
6689988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6690088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6690188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6690288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6690388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6690488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6690588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6690688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVT{<c>}{<q>}.S32.F32 <Sd>, <Sm> ; A1
6690788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvt(condition,
6690888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     S32,
6690988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
6691088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6691188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rm));
6691288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6691388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6691488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6691588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6691688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6691788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000e0000: {
6691888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0ebe0a40
6691988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6692088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6692188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6692288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6692388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6692488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_U_sx_1_Decode(
6692588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr >> 7) & 0x1) | ((instr >> 15) & 0x2));
6692688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
6692788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6692888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6692988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6693088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractSRegister(instr, 22, 12);
6693188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned offset = 32;
6693288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(S16) || dt.Is(U16)) {
6693388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              offset = 16;
6693488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6693588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t fbits = offset - (((instr >> 5) & 0x1) |
6693688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr << 1) & 0x1e));
66937d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VCVT{<c>}{<q>}.<dt>.F32 <Sdm>, <Sdm>, #<fbits> ; A1 NOLINT(whitespace/line_length)
6693888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vcvt(condition,
6693988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
6694088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 F32,
6694188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rd),
6694288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 SRegister(rd),
6694388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 fbits);
6694488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6694588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6694688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6694788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6694888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6694988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00b00100: {
6695088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0eb00b00
6695188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000)) {
6695288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6695388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6695488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6695588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        Condition condition((instr >> 28) & 0xf);
6695688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        unsigned rd = ExtractDRegister(instr, 22, 12);
6695788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        uint32_t encoded_imm =
6695888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            (instr & 0xf) | ((instr >> 12) & 0xf0);
6695988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        NeonImmediate imm =
6696088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ImmediateVFP::Decode<double>(encoded_imm);
6696188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // VMOV{<c>}{<q>}.F64 <Dd>, #<imm> ; A2
6696288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        vmov(condition, F64, DRegister(rd), imm);
6696388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xfb00ff0) != 0xeb00b00)) {
6696488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnpredictableA32(instr);
6696588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6696688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6696788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6696888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00b00140: {
6696988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0eb00b40
6697088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x000e0000) {
6697188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6697288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb00b40
6697388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6697488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6697588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb00b40
6697688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6697788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6697888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6697988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6698088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6698188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6698288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6698388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VMOV{<c>}{<q>}.F64 <Dd>, <Dm> ; A2
6698488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vmov(condition,
6698588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F64,
6698688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
6698788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
6698888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6698988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6699088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6699188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb00bc0
6699288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6699388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6699488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6699588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6699688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6699788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6699888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6699988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VABS{<c>}{<q>}.F64 <Dd>, <Dm> ; A2
6700088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vabs(condition,
6700188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F64,
6700288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
6700388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
6700488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6700588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6700688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6700788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb10b40
6700888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6700988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6701088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6701188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6701288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6701388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6701488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6701588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VNEG{<c>}{<q>}.F64 <Dd>, <Dm> ; A2
6701688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vneg(condition,
6701788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F64,
6701888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
6701988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
6702088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6702188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6702288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6702388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb10bc0
6702488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6702588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6702688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6702788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6702888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6702988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6703088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6703188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VSQRT{<c>}{<q>}.F64 <Dd>, <Dm> ; A1
6703288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vsqrt(condition,
6703388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F64,
6703488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rd),
6703588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm));
6703688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6703788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6703888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6703988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6704088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6704188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00020000: {
6704288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb20b40
6704388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6704488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6704588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb20b40
6704688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6704788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6704888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6704988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6705088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6705188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6705288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6705388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTB{<c>}{<q>}.F64.F16 <Dd>, <Sm> ; A1
6705488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtb(condition,
6705588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F64,
6705688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F16,
6705788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rd),
6705888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6705988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6706088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6706188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6706288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb20bc0
6706388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6706488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6706588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6706688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6706788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6706888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6706988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractSRegister(instr, 5, 0);
6707088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTT{<c>}{<q>}.F64.F16 <Dd>, <Sm> ; A1
6707188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtt(condition,
6707288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F64,
6707388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F16,
6707488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rd),
6707588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rm));
6707688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6707788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6707888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6707988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb30b40
6708088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6708188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6708288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6708388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6708488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6708588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6708688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6708788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTB{<c>}{<q>}.F16.F64 <Sd>, <Dm> ; A1
6708888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtb(condition,
6708988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F16,
6709088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F64,
6709188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6709288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm));
6709388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6709488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6709588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6709688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb30bc0
6709788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6709888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6709988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6710088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6710188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6710288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6710388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6710488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTT{<c>}{<q>}.F16.F64 <Sd>, <Dm> ; A1
6710588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtt(condition,
6710688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F16,
6710788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F64,
6710888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6710988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm));
6711088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6711188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6711288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6711388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6711488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6711588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00040000: {
6711688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb40b40
6711788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6711888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6711988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb40b40
6712088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6712188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6712288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6712388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6712488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6712588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6712688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6712788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCMP{<c>}{<q>}.F64 <Dd>, <Dm> ; A1
6712888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcmp(condition,
6712988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F64,
6713088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
6713188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
6713288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6713388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6713488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6713588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb40bc0
6713688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6713788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6713888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6713988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6714088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6714188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6714288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6714388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCMPE{<c>}{<q>}.F64 <Dd>, <Dm> ; A1
6714488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcmpe(condition,
6714588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F64,
6714688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rd),
6714788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm));
6714888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6714988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6715088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6715188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb50b40
6715288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6715388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6715488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6715588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6715688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6715788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6715888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCMP{<c>}{<q>}.F64 <Dd>, #0.0 ; A2
6715988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcmp(condition, F64, DRegister(rd), 0.0);
6716088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfbf0fff) != 0xeb50b40)) {
6716188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableA32(instr);
6716288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6716388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6716488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6716588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6716688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb50bc0
6716788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6716888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6716988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6717088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6717188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6717288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6717388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCMPE{<c>}{<q>}.F64 <Dd>, #0.0 ; A2
6717488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcmpe(condition, F64, DRegister(rd), 0.0);
6717588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfbf0fff) != 0xeb50bc0)) {
6717688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableA32(instr);
6717788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6717888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6717988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6718088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6718188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6718288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6718388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00060000: {
6718488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb60b40
6718588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6718688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6718788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb60b40
6718888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6718988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6719088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6719188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6719288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6719388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6719488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6719588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VRINTR{<c>}{<q>}.F64.F64 <Dd>, <Dm> ; A1
6719688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrintr(condition,
6719788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F64,
6719888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F64,
6719988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
6720088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm));
6720188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6720288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6720388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6720488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb60bc0
6720588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6720688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6720788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6720888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6720988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6721088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6721188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6721288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VRINTZ{<c>}{<q>}.F64.F64 <Dd>, <Dm> ; A1
6721388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrintz(condition,
6721488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F64,
6721588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F64,
6721688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
6721788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm));
6721888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6721988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6722088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6722188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb70b40
6722288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6722388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6722488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6722588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6722688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6722788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 22, 12);
6722888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6722988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VRINTX{<c>}{<q>}.F64.F64 <Dd>, <Dm> ; A1
6723088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vrintx(condition,
6723188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F64,
6723288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       F64,
6723388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rd),
6723488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       DRegister(rm));
6723588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6723688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6723788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6723888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0eb70bc0
6723988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6724088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6724188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6724288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6724388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6724488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6724588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6724688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVT{<c>}{<q>}.F32.F64 <Sd>, <Dm> ; A1
6724788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvt(condition,
6724888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F32,
6724988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F64,
6725088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6725188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
6725288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6725388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6725488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6725588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6725688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6725788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00080000: {
6725888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eb80b40
6725988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x00010000) == 0x00000000) {
6726088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000000) == 0xf0000000)) {
6726188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
6726288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
6726388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6726488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Condition condition((instr >> 28) & 0xf);
6726588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              DataType dt = Dt_op_2_Decode((instr >> 7) & 0x1);
6726688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (dt.Is(kDataTypeValueInvalid)) {
6726788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
6726888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
6726988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6727088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rd = ExtractDRegister(instr, 22, 12);
6727188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rm = ExtractSRegister(instr, 5, 0);
6727288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VCVT{<c>}{<q>}.F64.<dt> <Dd>, <Sm> ; A1
6727388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vcvt(condition,
6727488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   F64,
6727588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   dt,
6727688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   DRegister(rd),
6727788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                   SRegister(rm));
6727888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
6727988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6728088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6728188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6728288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6728388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000a0000: {
6728488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0eba0b40
6728588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6728688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6728788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6728888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6728988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6729088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_U_sx_1_Decode(
6729188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr >> 7) & 0x1) | ((instr >> 15) & 0x2));
6729288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
6729388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6729488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6729588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6729688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
6729788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned offset = 32;
6729888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(S16) || dt.Is(U16)) {
6729988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              offset = 16;
6730088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6730188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t fbits = offset - (((instr >> 5) & 0x1) |
6730288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr << 1) & 0x1e));
67303d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VCVT{<c>}{<q>}.F64.<dt> <Ddm>, <Ddm>, #<fbits> ; A1 NOLINT(whitespace/line_length)
6730488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vcvt(condition,
6730588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 F64,
6730688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
6730788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
6730888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
6730988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 fbits);
6731088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6731188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6731288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000c0000: {
6731388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0ebc0b40
6731488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00010080) {
6731588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6731688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ebc0b40
6731788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6731888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6731988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6732088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6732188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6732288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6732388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6732488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTR{<c>}{<q>}.U32.F64 <Sd>, <Dm> ; A1
6732588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtr(condition,
6732688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      U32,
6732788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F64,
6732888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6732988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm));
6733088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6733188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6733288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000080: {
6733388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ebc0bc0
6733488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6733588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6733688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6733788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6733888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6733988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6734088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6734188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVT{<c>}{<q>}.U32.F64 <Sd>, <Dm> ; A1
6734288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvt(condition,
6734388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     U32,
6734488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F64,
6734588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6734688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
6734788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6734888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6734988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010000: {
6735088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ebd0b40
6735188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6735288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6735388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6735488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6735588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6735688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6735788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6735888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVTR{<c>}{<q>}.S32.F64 <Sd>, <Dm> ; A1
6735988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvtr(condition,
6736088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      S32,
6736188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      F64,
6736288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      SRegister(rd),
6736388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      DRegister(rm));
6736488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6736588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6736688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00010080: {
6736788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ebd0bc0
6736888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6736988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6737088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6737188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6737288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6737388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractSRegister(instr, 22, 12);
6737488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rm = ExtractDRegister(instr, 5, 0);
6737588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VCVT{<c>}{<q>}.S32.F64 <Sd>, <Dm> ; A1
6737688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vcvt(condition,
6737788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     S32,
6737888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     F64,
6737988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     SRegister(rd),
6738088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rm));
6738188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6738288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6738388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6738488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6738588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6738688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x000e0000: {
6738788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0ebe0b40
6738888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6738988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6739088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6739188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6739288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6739388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt = Dt_U_sx_1_Decode(
6739488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                ((instr >> 7) & 0x1) | ((instr >> 15) & 0x2));
6739588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
6739688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6739788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6739888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6739988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 22, 12);
6740088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned offset = 32;
6740188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(S16) || dt.Is(U16)) {
6740288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              offset = 16;
6740388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6740488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            uint32_t fbits = offset - (((instr >> 5) & 0x1) |
6740588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                       ((instr << 1) & 0x1e));
67406d37560600128faaaf187963885366c3a9a5bdef8Pierre Langlois                            // VCVT{<c>}{<q>}.<dt>.F64 <Ddm>, <Ddm>, #<fbits> ; A1 NOLINT(whitespace/line_length)
6740788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vcvt(condition,
6740888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
6740988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 F64,
6741088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
6741188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegister(rd),
6741288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 fbits);
6741388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6741488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6741588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6741688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6741788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
674184339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                      default:
6741988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnallocatedA32(instr);
6742088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6742188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6742288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6742388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6742488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  default: {
6742588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    if (((instr & 0xf0000000) == 0xf0000000) ||
6742688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        ((instr & 0xe00) == 0xa00)) {
6742788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      UnallocatedA32(instr);
6742888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      return;
6742988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6743088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    UnimplementedA32("CDP", instr);
6743188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6743288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6743388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6743488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6743588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6743688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              case 0x00000010: {
6743788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                // 0x0e000010
6743888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                switch (instr & 0x00100000) {
6743988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00000000: {
6744088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0e000010
6744188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000e00) {
6744288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000a00: {
6744388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e000a10
6744488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00800100) {
6744588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6744688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0e000a10
6744788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x00600000) == 0x00000000) {
6744888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000000) == 0xf0000000)) {
6744988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
6745088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
6745188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6745288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Condition condition((instr >> 28) & 0xf);
6745388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rn = ExtractSRegister(instr, 7, 16);
6745488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
6745588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              // VMOV{<c>}{<q>} <Sn>, <Rt> ; A1
6745688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              vmov(condition, SRegister(rn), Register(rt));
6745788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xff00f7f) != 0xe000a10)) {
6745888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnpredictableA32(instr);
6745988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6746088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
6746188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6746288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6746388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6746488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6746588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
6746688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0e000b10
6746788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6746888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6746988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6747088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6747188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6747288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned lane;
6747388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
6747488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_opc1_opc2_1_Decode(((instr >> 5) & 0x3) |
6747588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                          ((instr >> 19) & 0xc),
6747688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                      &lane);
6747788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
6747888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6747988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6748088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6748188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rd = ExtractDRegister(instr, 7, 16);
6748288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6748388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VMOV{<c>}{<q>}{.<size>} <Dd[x]>, <Rt> ; A1
6748488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmov(condition,
6748588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
6748688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegisterLane(rd, lane),
6748788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt));
6748888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf900f1f) != 0xe000b10)) {
6748988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6749088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6749188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6749288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6749388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00800000: {
6749488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0e800a10
6749588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if ((instr & 0x00600000) == 0x00600000) {
6749688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              if (((instr & 0xf0000000) == 0xf0000000)) {
6749788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
6749888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                return;
6749988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6750088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              Condition condition((instr >> 28) & 0xf);
6750188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned spec_reg = (instr >> 16) & 0xf;
6750288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              unsigned rt = (instr >> 12) & 0xf;
6750388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              switch (spec_reg) {
6750488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x0:
6750588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x1:
6750688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                case 0x8: {
6750788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  // VMSR{<c>}{<q>} <spec_reg>, <Rt> ; A1
6750888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  vmsr(condition,
6750988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       SpecialFPRegister(spec_reg),
6751088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                       Register(rt));
6751188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  if (((instr & 0xff00fff) != 0xee00a10)) {
6751288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnpredictableA32(instr);
6751388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
6751488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
6751588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6751688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                default:
6751788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6751888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  break;
6751988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6752088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            } else {
6752188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6752288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6752388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6752488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6752588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00800100: {
6752688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0e800b10
6752788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00200040) {
6752888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6752988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0e800b10
6753088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6753188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6753288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6753388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6753488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6753588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
6753688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_B_E_1_Decode(((instr >> 5) & 0x1) |
6753788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 21) & 0x2));
6753888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
6753988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6754088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6754188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6754288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractDRegister(instr, 7, 16);
6754388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rt = (instr >> 12) & 0xf;
6754488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VDUP{<c>}{<q>}.<dt> <Dd>, <Rt> ; A1
6754588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vdup(condition,
6754688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
6754788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     DRegister(rd),
6754888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rt));
6754988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfb00f5f) != 0xe800b10)) {
6755088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableA32(instr);
6755188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6755288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6755388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6755488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00200000: {
6755588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ea00b10
6755688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6755788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6755888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6755988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6756088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6756188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                DataType dt =
6756288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    Dt_B_E_1_Decode(((instr >> 5) & 0x1) |
6756388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                    ((instr >> 21) & 0x2));
6756488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (dt.Is(kDataTypeValueInvalid)) {
6756588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6756688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6756788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6756888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr >> 16) & 1) != 0) {
6756988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6757088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6757188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6757288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rd = ExtractQRegister(instr, 7, 16);
6757388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rt = (instr >> 12) & 0xf;
6757488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VDUP{<c>}{<q>}.<dt> <Qd>, <Rt> ; A1
6757588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vdup(condition,
6757688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     dt,
6757788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     QRegister(rd),
6757888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                     Register(rt));
6757988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xfb00f5f) != 0xea00b10)) {
6758088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableA32(instr);
6758188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6758288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6758388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
675844339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
6758588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
6758688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6758788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6758888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6758988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6759088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6759188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6759288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6759388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6759488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6759588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe00) == 0xa00)) {
6759688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6759788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6759888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6759988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("MCR", instr);
6760088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6760188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6760288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6760388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6760488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6760588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  case 0x00100000: {
6760688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    // 0x0e100010
6760788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    switch (instr & 0x00000e00) {
6760888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      case 0x00000a00: {
6760988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        // 0x0e100a10
6761088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        switch (instr & 0x00000100) {
6761188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000000: {
6761288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0e100a10
6761388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            switch (instr & 0x00e00000) {
6761488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00000000: {
6761588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0e100a10
6761688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6761788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6761888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6761988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6762088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6762188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rt = (instr >> 12) & 0xf;
6762288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rn = ExtractSRegister(instr, 7, 16);
6762388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // VMOV{<c>}{<q>} <Rt>, <Sn> ; A1
6762488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                vmov(condition, Register(rt), SRegister(rn));
6762588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xff00f7f) != 0xe100a10)) {
6762688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnpredictableA32(instr);
6762788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6762888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6762988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
6763088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              case 0x00e00000: {
6763188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                // 0x0ef00a10
6763288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                if (((instr & 0xf0000000) == 0xf0000000)) {
6763388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  UnallocatedA32(instr);
6763488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  return;
6763588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6763688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Condition condition((instr >> 28) & 0xf);
6763788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned rt = (instr >> 12) & 0xf;
6763888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                unsigned spec_reg = (instr >> 16) & 0xf;
6763988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                switch (spec_reg) {
6764088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x0:
6764188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x1:
6764288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x5:
6764388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x6:
6764488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x7:
6764588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  case 0x8: {
6764688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    // VMRS{<c>}{<q>} <Rt>, <spec_reg> ; A1
6764788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    vmrs(condition,
6764888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         RegisterOrAPSR_nzcv(rt),
6764988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                         SpecialFPRegister(spec_reg));
6765088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    if (((instr & 0xff00fff) != 0xef00a10)) {
6765188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                      UnpredictableA32(instr);
6765288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    }
6765388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
6765488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  }
6765588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                  default:
6765688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    UnallocatedA32(instr);
6765788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                    break;
6765888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                }
6765988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6766088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              }
676614339c4bbb18b2d975202d6da09a08eefdaabc27cVincent Belliard                              default:
6766288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                UnallocatedA32(instr);
6766388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                break;
6766488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6766588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6766688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6766788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          case 0x00000100: {
6766888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // 0x0e100b10
6766988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf0000000) == 0xf0000000)) {
6767088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6767188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6767288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6767388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            Condition condition((instr >> 28) & 0xf);
6767488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned lane;
6767588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            DataType dt =
6767688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                Dt_U_opc1_opc2_1_Decode(((instr >> 5) & 0x3) |
6767788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            ((instr >> 19) &
6767888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             0xc) |
6767988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                            ((instr >> 19) &
6768088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                             0x10),
6768188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                                        &lane);
6768288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (dt.Is(kDataTypeValueInvalid)) {
6768388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnallocatedA32(instr);
6768488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              return;
6768588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6768688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rt = (instr >> 12) & 0xf;
6768788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            unsigned rn = ExtractDRegister(instr, 7, 16);
6768888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            // VMOV{<c>}{<q>}{.<dt>} <Rt>, <Dn[x]> ; A1
6768988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            vmov(condition,
6769088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 dt,
6769188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 Register(rt),
6769288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                                 DRegisterLane(rn, lane));
6769388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            if (((instr & 0xf100f1f) != 0xe100b10)) {
6769488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                              UnpredictableA32(instr);
6769588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            }
6769688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            break;
6769788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          }
6769888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6769988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6770088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6770188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      default: {
6770288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        if (((instr & 0xf0000000) == 0xf0000000) ||
6770388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                            ((instr & 0xe00) == 0xa00)) {
6770488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          UnallocatedA32(instr);
6770588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                          return;
6770688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        }
6770788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        UnimplementedA32("MRC", instr);
6770888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                        break;
6770988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                      }
6771088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    }
6771188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                    break;
6771288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                  }
6771388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                }
6771488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois                break;
6771588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              }
6771688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6771788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6771888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6771988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          case 0x01000000: {
6772088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // 0x0f000000
6772188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            if (((instr & 0xf0000000) == 0xf0000000)) {
6772288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              UnallocatedA32(instr);
6772388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois              return;
6772488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            }
6772588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            Condition condition((instr >> 28) & 0xf);
6772688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            uint32_t imm = instr & 0xffffff;
6772788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            // SVC{<c>}{<q>} {#}<imm> ; A1
6772888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            svc(condition, imm);
6772988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois            break;
6773088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois          }
6773188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        }
6773288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois        break;
6773388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      }
6773488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    }
6773588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6773688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}  // NOLINT(readability/fn_size)
6773788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// End of generated code.
6773888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6773969acb5618ef7c69bbe165d24493d1af0a00bcc4aAnton Kirilovconst uint16_t* PrintDisassembler::DecodeT32At(
6774096ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard    const uint16_t* instruction_address, const uint16_t* buffer_end) {
67741f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov  uint32_t instruction = *instruction_address++ << 16;
67742f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov
67743f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov  if (instruction >= kLowestT32_32Opcode) {
6774496ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard    if (instruction_address >= buffer_end) {
6774596ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard      os() << "?\n";
6774696ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard      return instruction_address;
6774796ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard    }
67748f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov    instruction |= *instruction_address++;
67749f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov  }
67750f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov
67751f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov  DecodeT32(instruction);
67752f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov  return instruction_address;
67753f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov}
67754f7535f22629946eb706d02b8b926e5fe77e3b398Anton Kirilov
6775588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid PrintDisassembler::DecodeT32(uint32_t instruction) {
677561075d15db3f11224e70960ed653462064018a001Vincent Belliard  PrintCodeAddress(GetCodeAddress());
6775788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  if (T32Size(instruction) == 2) {
67758c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    PrintOpcode16(instruction >> 16);
6775988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Disassembler::DecodeT32(instruction);
6776088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  } else {
67761c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois    PrintOpcode32(instruction);
6776288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    Disassembler::DecodeT32(instruction);
6776388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
67764c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  os() << "\n";
6776588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
6776688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6776788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6776888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid PrintDisassembler::DecodeA32(uint32_t instruction) {
677691075d15db3f11224e70960ed653462064018a001Vincent Belliard  PrintCodeAddress(GetCodeAddress());
67770c591f74ae6d6a8fefaacedcfa5c23100cb23c23dPierre Langlois  PrintOpcode32(instruction);
6777188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  Disassembler::DecodeA32(instruction);
6777288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  os() << "\n";
6777388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
6777488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6777588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6777688c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid PrintDisassembler::DisassembleA32Buffer(const uint32_t* buffer,
6777796ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard                                             size_t size_in_bytes) {
6777896ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard  VIXL_ASSERT(IsAligned<sizeof(buffer[0])>(buffer));
6777996ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard  VIXL_ASSERT(IsMultiple<sizeof(buffer[0])>(size_in_bytes));
6778088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  const uint32_t* const end_buffer =
6778188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      buffer + (size_in_bytes / sizeof(uint32_t));
6778288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  while (buffer < end_buffer) {
6778388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois    DecodeA32(*buffer++);
6778488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6778588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
6778688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6778788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6778888c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisvoid PrintDisassembler::DisassembleT32Buffer(const uint16_t* buffer,
6778996ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard                                             size_t size_in_bytes) {
6779096ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard  VIXL_ASSERT(IsAligned<sizeof(buffer[0])>(buffer));
6779196ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard  VIXL_ASSERT(IsMultiple<sizeof(buffer[0])>(size_in_bytes));
6779288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  const uint16_t* const end_buffer =
6779388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois      buffer + (size_in_bytes / sizeof(uint16_t));
6779488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  while (buffer < end_buffer) {
6779596ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard    buffer = DecodeT32At(buffer, end_buffer);
6779688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois  }
6779796ff2a40fffe1d0d754a2187efe5ebabef6d8e44Vincent Belliard  VIXL_ASSERT(buffer == end_buffer);
6779888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}
6779988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois
6780088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}  // namespace aarch32
6780188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}  // namespace vixl
67802